scc

noip模拟测试15

隐身守侯 提交于 2020-02-06 22:41:42
T1:建设城市(city)   第一眼看是组合,然后看到k的限制发现是容斥   用插板法加容斥得出:$\sum_{i=0}^{m-i*k-1 \leq n-1}C_n^i*C_{m-i*k-1}^{n-1}*(-1)^i$   但发现$n$的范围是$10^9$,组合数计算是$O(n)$的   但又发现$m$的范围是$10^7$,所以特判$n>m$的情况就行了 1 #include<cstdio> 2 #include<iostream> 3 #include<cmath> 4 #include<cstring> 5 #include<algorithm> 6 #include<vector> 7 #include<queue> 8 #define ll long long 9 using namespace std; 10 const int MAXN=10000005; 11 const ll D=998244353; 12 ll n,m,k,ans,fac[MAXN],inv[MAXN]; 13 ll qpow(ll x,ll k) { 14 ll ret=1; 15 while(k) { 16 if(k&1) ret=ret*x%D; 17 x=x*x%D; 18 k>>=1; 19 } 20 return ret; 21 } 22 void first() { 23 fac

CF467D. Fedor and Essay

烈酒焚心 提交于 2020-02-01 22:41:26
不难看出,这是一道图论的题,只要要求在 \(r\) ,的个数最小时, \(r\) 的个数与文章长度。 预备知识 STL之 map (内置应该是hash之类的) tarjan 缩点 树形dp 简单字符串 邻接表存边 问题分析 由于同义是单向的,我们建起了单向边,容易的是,如果一个单词可以最后回到他自己,那就把这个环上的点缩成一个 scc ,记下每个scc的最优 \(r\) 和最优 \(leg\) (即 \(length\) 但我由于个人原因更喜欢用 \(lgh\) ) 在对我们所得的每一个强连通,进行重构图。最后跑一个 \(dp\) 即可(可以用深搜实现) 统计答案时,对每一个word独立操作即可 如果你还是不太清楚,我们再来看图(样例一) 我们先建一个对应关系 然后,我们间的图即为 然后,我们先进行缩点,然后统计出每个强连通的最优值,最后跑一遍树形dp就可以了 其实只要看清楚这个题的意思,就很好AC了 时间复杂度分析 tarjan O(n+m) 统计最优值 O(n) 树形dp O(n) 好的没有毒瘤 \(n^2\) ,此题可过 附上代码 #include <iostream> #include <cstdio> #include <cstring> #include <queue> #include <string> #include <map> using namespace

bzoj 2707 [SDOI2012]走迷宫(SCC+高斯消元)

你说的曾经没有我的故事 提交于 2020-01-30 04:10:20
Description Morenan被困在了一个迷宫里。迷宫可以视为N个点M条边的有向图,其中Morenan处于起点S,迷宫的终点设为T。可惜的是,Morenan非常的脑小, 他只会从一个点出发随机沿着一条从该点出发的有向边,到达另一个点。 这样,Morenan走的步数可能很长,也可能是无限,更可能到不了终点。 若到不了终点,则步数视为无穷大。 但你必须想方设法求出Morenan所走步数的期望值。 Input 第1行4个整数,N,M,S,T 第[2, M+1]行每行两个整数o1, o2,表示有一条从o1到o2的边。 Output 一个浮点数,保留小数点3位,为步数的期望值。若期望值为无穷大,则输出"INF"。 【样例输入1】 6 6 1 6 1 2 1 3 2 4 3 5 4 6 5 6 【样例输出1】 3.000 【样例输入2】 9 12 1 9 1 2 2 3 3 1 3 4 3 7 4 5 5 6 6 4 6 7 7 8 8 9 9 7 【样例输出2】 9.500 【样例输入3】 2 0 1 2 【样例输出3】 INF 【数据范围】 测试点 N M Hint [1, 6] <=10 <=100 [7, 12] <=200 <=10000 [13, 20] <=10000 <=1000000 保证强连通分量的大小不超过100 另外,均匀分布着40%的数据,图中没有环

Tarjan & LCA 套题题目题解

拟墨画扇 提交于 2020-01-29 17:21:42
刷题之前来几套LCA的末班 对于题目 HDU 2586 How far away 2份在线模板第一份倍增,倍增还是比较好理解的 #include <map> #include <set> #include <list> #include <cmath> #include <ctime> #include <deque> #include <stack> #include <queue> #include <cctype> #include <cstdio> #include <string> #include <vector> #include <climits> #include <cstdlib> #include <cstring> #include <iostream> #include <algorithm> #define LL long long #define PI 3.1415926535897932626 using namespace std; int gcd(int a, int b) {return a % b == 0 ? b : gcd(b, a % b);} const int MAXN = 40040; const int MAXM = MAXN * 2; const int INF = 0x3f3f3f3f; struct Edge { int

双连通分量

╄→尐↘猪︶ㄣ 提交于 2020-01-26 18:26:44
目录 双连通分量 前置知识 基本概念 点双连通分量 代码 边双连通分量 代码 例题 P3225 矿场搭建 hdu4612 Warm up 双连通分量 前置知识 @FISHER_ —— 强连通分量 @szTom —— 割点和桥 不抄代码的好习惯 基本概念 双连通分量又分点双连通分量和边双连通分量两种。若一个无向图中的去掉任意一个节点(一条边)都不会改变此图的连通性,即不存在割点(桥),则称作点(边)双连通图。一个无向图中的每一个极大点(边)双连通子图称作此无向图的点(边)双连通分量。求双连通分量可用Tarjan算法。——百度 简单来说,一个没有割点(桥)的无向图就是点(边)双连通分量。 以下图为例: 对于这个图来说一共有2个点双连通分量,分别是: (1,2,5),(2,3,4) 有3个边双连通分量,分别是: (1,2,5),(2,3,4),(1,2,3,4,5) 点双连通分量 首先对于一个点双连通分量来说,里面一定没有割点。 所以说当我们查找到一个割点u的时候,就将以u为根的搜索子树内 还不属于任何一个点双连通分量 且 不为割点 或 为割点 但 与那些以u为根的搜索子树内 还不属于任何一个点双连通分量 且 不为割点 的点 直接连通的点 为一个点双连通分量。 简单来说,就是当我们查找到一个割点的时候,我们像 强连通分量 那样让仍在栈内的点成为一个点双连通分量。 最后附上代码: 代码

Tarjan算法专练

左心房为你撑大大i 提交于 2020-01-24 16:46:32
1. 迷宫城堡 题意:给一个图判断是否是强连通图。 题解:利用Tarjan计算图中强连通分量的个数,如果为1则是强连通图,否则不是。 #include<bits/stdc++.h> using namespace std; const int N = 2e4+100; typedef long long ll; vector<int> G[N]; bool is_instack[N]; int dfn[N],low[N]; stack<int> sta; int n,m,index,scc; void init(){ index=scc=0; memset(dfn,0,sizeof(dfn)); memset(low,0,sizeof(low)); memset(is_instack,0,sizeof(is_instack)); while(!sta.empty()) sta.pop(); for(int i=1;i<=n;i++) G[i].clear(); } void Tarjan(int u){ dfn[u]=low[u]=++index; sta.push(u);is_instack[u]=1; for(auto v:G[u]){ if(!dfn[v]){ Tarjan(v); low[u]=min(low[u],low[v]); } else if(is_instack

多种银行卡正则

故事扮演 提交于 2020-01-20 00:37:01
var bankcardList = [{ bankName: "中国邮政储蓄银行", bankCode: "PSBC", patterns: [{ reg: /^(621096|621098|622150|622151|622181|622188|622199|955100|621095|620062|621285|621798|621799|621797|620529|621622|621599|621674|623218|623219)\d{13}$/g, cardType: "DC" }, { reg: /^(62215049|62215050|62215051|62218850|62218851|62218849)\d{11}$/g, cardType: "DC" }, { reg: /^(622812|622810|622811|628310|625919)\d{10}$/g, cardType: "CC" }] }, { bankName: "中国工商银行", bankCode: "ICBC", patterns: [{ reg: /^(620200|620302|620402|620403|620404|620406|620407|620409|620410|620411|620412|620502|620503|620405|620408|620512

SSummerZzz kuangbin专题 专题九 连通图 POJ 3177 Redundant Paths

寵の児 提交于 2020-01-16 01:45:49
题目链接: https://vjudge.net/article/371?tdsourcetag=s_pcqq_aiomsg 题目:给定一个连通图,题目说,任意两个点至少有一条路线可以相互到达, 为保证任意两点有完全不同的路线(点可以相同,边不能相同)可以相互到达至少需要加几条边。 思路:tarjan缩点,之后重构图,找出度数为1的scc个数scc_cnt,这些点相互连接,答案可以得出是 (scc_cnt+1)/2。 两组样例: n = 5 ,m = 4 | (1 2) (1 3) )(1 4) (1 5) n = 8, m = 9 | (1 2) (1 4) (2 3) (3 4) (4 5) (5 6) (6 7) (5 8) (7 8 ) #include <iostream> #include <cstdio> #include <algorithm> using namespace std; const int N = (int)5e3+10; int head[N],dfn[N],low[N],scc_no[N],s[N],du[N]; int n,m,tot,tim,scc,top; struct node{ int to; int nxt; }e[N << 2]; inline void add(int u,int v){ e[tot].to = v; e[tot]

一、根据银行卡号区分信用卡还是储蓄卡

为君一笑 提交于 2019-12-10 09:50:20
一、根据银行卡号区分信用卡还是储蓄卡 https://ccdcapi.alipay.com/validateAndCacheCardInfo.json?_input_charset=utf-8&cardBinCheck=true&cardNo=6214832142686668 如图: var cardTypeMap = { DC: "储蓄卡", CC: "信用卡", SCC: "准贷记卡", PC: "预付费卡" }; 来源: https://www.cnblogs.com/fger/p/12014767.html

星币特系统开发挖矿软件

走远了吗. 提交于 2019-12-06 12:26:15
星币特系统开发找(T:130、V2524电9123鹏森),星币特模式开发定制,星币特APP开发,星币特软件开发,星币特开发案例,星币特平台开发   可开发类似系统···非平台···玩家勿扰   星币特认筹总量198W、发行价0.3元、每个会员ID限制5000个(SCC)、认筹3天,至2018年10月18日中午12点结束、总发行2000W(SCC)、认筹200W(SCC)矿机产量1800W(SCC)这是它的特点   系统实名赠送微型小矿机30天产量11个SCC   一、星币特的模式制度讲解   直推5人,团队30人,算力一百GH/S,升级云星会长;获小型云矿机1台,享受交易佣金20%分红   微型云矿机30天720小时?产量15个SCC价格10个SCC   直推里有3个云星会长,算力三百GH/S,升级云星大使;获中型云矿机1台,享受交易佣金15%分红   小型云矿机50天1200小时?产量150个SCC价格100个SCC   直推里有3个云星大使,算力五百GH/S,升级云星先锋;获大型云矿机1台,享受交易佣金10%分红   中型云矿机50天1200小时?产量450个SCC价格300个SCC   直推里有3个云星先锋,算力一千GH/S,升级云星大亨;获超级型云矿机1台,享受交易佣金5%分红   大型云矿机70天1680小时?产量1750个SCC价格1000个SCC   超级云矿机