社区讨论

76pts求条

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

讨论操作

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

当前回复
0 条
当前快照
1 份
快照标识符
@mlhbzuz0
此快照首次捕获于
2026/02/11 09:08
上周
此快照最后确认于
2026/02/11 10:45
上周
查看原帖
CPP
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m;
vector<int> v[10010],V[10010],vv[10010];
int dfn[10010],num[10010],cnt,cx[10010];
int vis[10010],f[10010],ANS;
int size[10010]; 
void dfs(int u){
	num[u]=1;
	for(int i=0;i<v[u].size();i++){
		int j=v[u][i];
		if(num[j]) continue;
		dfs(j);
	}
	dfn[u]=++cnt;
	cx[cnt]=u;
}
void Dfs(int u,int F){
	vis[u]=1;
	f[u]=F;
	for(int i=0;i<V[u].size();i++){
		int j=V[u][i];
		if(vis[j]) continue;
		Dfs(j,F);
	}
}
int T[10010],ans;
map<pair<int,int>,int> mp;
int out[10010],in[10010]; 
signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	//freopen(".out","w",stdout);
	cin>>n>>m;
	for(int i=1;i<=m;i++){
		int a,b,t;
		cin>>a>>b;
		if(a==b) continue;
		v[a].push_back(b);
		V[b].push_back(a);
	}
	for(int i=1;i<=n;i++) v[0].push_back(i);
	dfs(0);
	for(int i=n;i>=1;i--){
		if(vis[cx[i]]) continue;
		Dfs(cx[i],cx[i]);
	}
	for(int i=1;i<=n;i++) size[f[i]]++;
	for(int u=1;u<=n;u++){
		int F=f[u];
		for(int i=0;i<v[u].size();i++){
			int j=v[u][i];
			if(mp[{F,f[j]}]||mp[{f[j],F}]||F==f[j]) continue;
			mp[{F,f[j]}]=mp[{f[j],F}]=1;
			vv[F].push_back(f[j]);
			out[F]++;
			in[f[j]]++;
		}
	}
	for(int i=1;i<=n;i++){
		if(!out[i]&&in[i]){
			ANS++;
			ans+=size[i];
		}
	}
	if(ANS==1) cout<<ans;
	else cout<<0;
	return 0;
}

回复

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

正在加载回复...