社区讨论

76pts 求调

P2863[USACO06JAN] The Cow Prom S参与者 2已保存回复 2

讨论操作

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

当前回复
2 条
当前快照
1 份
快照标识符
@mlkhqrud
此快照首次捕获于
2026/02/13 14:12
6 天前
此快照最后确认于
2026/02/16 11:45
3 天前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
const int N=1e4+10;
int n,m,T,num,ans;
int a[N],b[N],dfn[N],low[N],co[N],siz[N];
bool vis[N];
vector<int> g[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(dfn[x]==low[x])
	{
		num++;
		do{
			u=s.top();
			s.pop();
			vis[u]=false;
			co[u]=num;
			siz[num]++;
		}while(x!=u);
	}
}
int main()
{
	n=read();
	m=read();
	for(int i=1;i<=m;i++)
	{
		a[i]=read();
		b[i]=read();
		g[a[i]].push_back(b[i]);
	}
	for(int i=1;i<=n;i++)
	{
		if(!dfn[i])
		{
			tarjan(i);
		}
	}
	for(int i=1;i<=num;i++)
	{
		if(siz[i]>1)
		{
			ans++;
		}
	}
	write(ans);
	return 0;
}



WA on #8 # 9 #10

回复

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

正在加载回复...