首页 > 其他分享 >Codeforces Round 244 (Div. 2) C. Checkposts(tarjan)

Codeforces Round 244 (Div. 2) C. Checkposts(tarjan)

时间:2023-05-11 20:24:38浏览次数:45  
标签:tarjan int top Checkposts Codeforces stk dfn low cnt

题目链接

思路

考虑到如果一些点两两都能互相到达,那么这些点中,只要有一个点是安全的,就可以顾及到其他所有点,而这些点就是强连通分量(SCC)。

思路很简单,就是每一个强连通分量中的最小值相加得到第一问的解,而第二问就是求每一个强连通分量有几个最小值,相乘得到答案。

代码

#include <iostream>
#include <cstring>
using namespace std;
typedef long long LL;
const int N = 100010,M = 300010,MOD = 1e9 + 7;
int n,m;
int a[N];
int h[N],e[M],ne[M],idx;
int dfn[N],low[N],timestamp;
int id[N],scc_cnt,size[N];
int stk[N],top;
bool in_stk[N];
int min_num[N],min_cnt[N];
void add_edge (int a,int b) {
	e[idx] = b;
	ne[idx] = h[a];
	h[a] = idx++;
}
void tarjan (int u) {
	dfn[u] = low[u] = ++timestamp;
	stk[++top] = u;
	in_stk[u] = true;
	for (int i = h[u];~i;i = ne[i]) {
		int j = e[i];
		if (!dfn[j]) {
			tarjan (j);
			low[u] = min (low[u],low[j]);
		}
		else if (in_stk[j]) low[u] = min (low[u],dfn[j]);
	}
	if (dfn[u] == low[u]) {
		scc_cnt++;
		do {
			id[stk[top]] = scc_cnt;
			in_stk[stk[top--]] = false;
			size[scc_cnt]++;
		}
		while (stk[top + 1] != u);
	}
}
int main () {
	memset (h,-1,sizeof (h));
    scanf ("%d",&n);
    for (int i = 1;i <= n;i++) scanf ("%d",&a[i]);
    scanf ("%d",&m);
    while (m--) {
    	int a,b;
    	scanf ("%d%d",&a,&b);
    	add_edge (a,b);
	}
	for (int i = 1;i <= n;i++) {
		if (!dfn[i]) tarjan (i);
	}
	for (int i = 1;i <= scc_cnt;i++) min_num[i] = 2e9;
	for (int i = 1;i <= n;i++) {
		if (a[i] < min_num[id[i]]) min_num[id[i]] = a[i],min_cnt[id[i]] = 1;
		else if (a[i] == min_num[id[i]]) min_cnt[id[i]]++;
	}
	LL ans1 = 0,ans2 = 1;
	for (int i = 1;i <= scc_cnt;i++) ans1 += min_num[i],ans2 = ans2 * min_cnt[i] % MOD;
	printf ("%lld %lld\n",ans1,ans2);
    return 0;
}

标签:tarjan,int,top,Checkposts,Codeforces,stk,dfn,low,cnt
From: https://www.cnblogs.com/incra/p/17392125.html

相关文章

  • 两道倍数codeforces 题 —— 2倍与加减1相关
    目录题目大意题1题2思路题1题2总结题1https://codeforces.com/problemset/problem/520/B题2https://codeforces.com/problemset/problem/710/E题目大意题1一个设备可支持两种操作:将当前数\times2。将当前数-1−1。另外,当设备中的数不是正数时,设备将会崩溃。现在给......
  • Codeforces 543E - Listening to Music(分块)
    根号log做法。能过CF的数据,但过不了校内模拟赛的数据/tuu考虑从\(f(i,x)\)到\(f(i+1,x)\)的变化在哪里:少了个\(a_i\)多了个\(a_{i+m}\),因此显然只有\(x\)在它俩中间才有\(f(i,x)\nef(i+1,x)\),即:\[f(i+1,x)-f(i,x)=\begin{cases}-1&(a_i<x\lea_{i+m})\\1&(a_{i+m......
  • # Codeforces Round 872 (Div. 2) 题解
    CodeforcesRound872(Div.2)题解A.LuoTianyiandthePalindromeString略B.LuoTianyiandtheTable略C.LuoTianyiandtheShow略D1.LuoTianyiandtheFloatingIslands(EasyVersion)题意在树上随机撒\(k(k\leq3)\)个关键点,规定一个点是好的当且仅当这个......
  • Codeforces Round 683 (Div. 1, by Meet IT) ABCDF题解
    F和D都在ABC上做过类似的,但是没打好,道心破碎。。。。A.Knapsack若物品质量在[(w+1)/2,w]之间做完了否则一直贪心加voidsolve(){intn;llw;cin>>n>>w;intc=n;for(inti=1;i<=n;i++){cin>>a[i];if(a[i]>w)c--;}if(!c){......
  • Codeforces [Hello 2020] 1284F New Year and Social Network(图论匹配推理+lct)
    https://codeforces.com/contest/1284/problem/F题目大意:有两个大小为n的树T1和T2.T2中的每条边(u,v)可以匹配T1中u到v路径上的所有边。求最大匹配,并给出方案。\(1<=n<=250000\)题解:首先你需要观察样例大胆猜想一定有完美匹配。考虑T1中的一个叶子x和它的父亲y。显然的是,从T2中随......
  • Codeforces F. Bits And Pieces(位运算)
    传送门.位运算的比较基本的题。考虑枚举\(i\),然后二进制位从大到小考虑,对于第\(w\)位,如果\(a[i][w]=1\),那么对\(j、k\)并没有什么限制。如果\(a[i][w]=0\),那么我们希望\((a[j]~and~a[k])[w]=1\),结合前面的限制,就是给定\(x\),问有没有\(x∈a[j]~and~a[k](i<j<k)\)。那么这应该是做一......
  • Codeforces Round 872 (Div. 2) A-D
    比赛地址A.LuoTianyiandthePalindromeString题意:给一个回文串,求最长的非回文子串的长度Solution判一下回文串是不是由相同的字母组成的,如果是的那么无解,如果不是答案就是len-1voidsolve(){ strings;cin>>s; intlen=s.length(); intsum=1; for(inti=1;i<s.leng......
  • Codeforces Round 872 (Div. 1 & Div. 2)
    这场寄大了。Mypredictorsay-101pts。https://codeforces.com/contest/1824https://codeforces.com/contest/18252A.LuoTianyiandthePalindromeString因为给出的\(s\)是一个回文串,所以答案只可能是\(-1\)或者\(n-1\),只需要看一下删掉哪一个即可,然后判定,这些都......
  • CodeForces - 631A Interview (思想)水
    TimeLimit: 1000MS MemoryLimit: 262144KB 64bitIOFormat: %I64d&%I64uCodeForces-631AInterviewSubmit StatusDescriptionBlakeisaCEOofalargecompanycalled"BlakeTechnologies".Heloveshiscompanyverymuchandhethinksthathi......
  • CodeForces - 630F Selection of Personnel (组合数学)
    TimeLimit: 500MS MemoryLimit: 65536KB 64bitIOFormat: %I64d&%I64uCodeForces-630FSelectionofPersonnelSubmit StatusDescriptionOnecompanyofITCitydecidedtocreateagroupofinnovativedevelopmentsconsistingfrom 5 to 7 peopleandhir......