92分WA#19#20,求
查看原帖
92分WA#19#20,求
551417
CommonDigger楼主2024/6/15 14:00
#include "iostream"
using namespace std;
int n, m, temp1, temp2, t=0, ans, belong[10005], size[10005];
int head[10005], idx, j;
int dfn[10005],  low[10005], s[10005], top=0;
int out[10005], c1, c2;
bool ins[10005];
struct edge{
	int to, nxt;
}e[100005];
void add_edge(int u, int v){
	e[++idx].to=v;
	e[idx].nxt=head[u];
	head[u]=idx;
}
void dfs(int x){
	low[x]=dfn[x]=++t;
	s[++top]=x;
	ins[x]=true;
	for(int i=head[x];i!=0;i=e[i].nxt){
		j=e[i].to;
		if(!dfn[j]){
			dfs(j);
			low[x]=min(low[x], low[j]);
		}else if(ins[j]) low[x]=min(low[x], low[j]);
	}
	if(dfn[x]==low[x]){
		ans++;
		do{
			j=s[top--];
			ins[j]=false;
			belong[j]=ans;
			size[ans]++;
		}while(j!=x);
	}
} 
int main(){
	scanf("%d%d", &n, &m);
	for(int i=1;i<=m;i++){
		scanf("%d%d", &temp1, &temp2);
		add_edge(temp1, temp2);
	}
	for(int i=1;i<=n;i++)
		if(!dfn[i]) dfs(i);
	for(int i=1;i<=n;i++){
		for(int j=head[i];j!=0;j=e[j].nxt) if(belong[i]!=belong[e[j].to]) out[belong[i]]++;
	}
        for(int i=1;i<=ans;i++) if(out[i]==0) c1++, c2=size[i];
	if(c1==1) printf("%d", c2);
	else printf("0");
}
2024/6/15 14:00
加载中...