社区讨论
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 条回复,欢迎继续交流。
正在加载回复...