社区讨论

52 求调,悬赏1个关注

P2341[USACO03FALL / HAOI2006] 受欢迎的牛 G参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mlhoxaea
此快照首次捕获于
2026/02/11 15:10
上周
此快照最后确认于
2026/02/11 15:14
上周
查看原帖
WA on #2 #9 #10 #11 #12 #13 #16 #17 #18 #19 #20 #21
C
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
const int M=5e4+10;
struct way{
	int a,b;
}w[M];
int n,m,t,ans,ret,cnt,low[N],dfn[N],co[N],number[N],d[N];
vector<int> g[N];
bool vis[N];
stack<int> s;
inline int read()
{
    int k=0,f=1;
    char c=getchar();
    while(c<'0'||c>'9')
    {
        if(c=='-')f=-1;
        c=getchar();
    }
    while(c>='0'&&c<='9')k=k*10+c-'0',c=getchar();
    return k*f;
}
void write(int x)
{
    if(x<0)putchar('-'),x=-x;
    if(x<10)putchar(x+'0');
    else write(x/10),putchar(x%10+'0');
}
void tarjan(int x)
{
	dfn[x]=low[x]=++t;
	s.push(x);
	vis[x]=true;
	for(int i=0;i<g[x].size();i++)
	{
		int k=g[x][i];
		if(!dfn[k])
		{
			tarjan(k);
			low[x]=min(low[x],low[k]);
		}else{
			if(vis[k])
			{
				low[x]=min(low[x],low[k]);
			}
		}
	}
	int u;
	if(low[x]==dfn[x])
	{
		cnt++;
		co[x]=cnt;
		vis[x]=0;
		do{
			u=s.top();
			s.pop();
			vis[u]=0;
			co[u]=cnt;
			number[cnt]++;
		}while(u!=x);
	}
	return;//养成好习惯 (0w0) 
}
int main()
{
	n=read();
	m=read();
	for(int i=1;i<=m;i++)
	{
		w[i].a=read();
		w[i].b=read();
		g[w[i].a].push_back(w[i].b);
	}
	//______________________________________________
	for(int i=1;i<=n;i++)
	{
		if(!dfn[i])
		{
			tarjan(i);
		}
	}
	//______________________________________________
	for(int i=1;i<=n;i++)
	{
		for(int j=0;j<g[i].size();j++)
		{
			int k=g[i][j];
			if(co[i]==co[k])
			{
				continue;
			}
			d[co[i]]++;
		}
	}
	//______________________________________________
	for(int i=1;i<=cnt;i++)
	{
		if(!d[i])
		{
			if(ans)
			{
				cout<<0;
				return 0;
			}
			ans=i;
		}
	}
	cout<<ans; 
	return 0;
}


回复

0 条回复,欢迎继续交流。

正在加载回复...