题解:P10521 [XJTUPC2024] 瑟莉姆的宴会
首先这个题我们需要的是最后总值为正,也就是说需要让更多人满足条件中
所以我们就可以用一个
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n,m,t[500005],fa[500005],vis[500005],ans[500005];
void dfs(int u){
vis[u]=1;
for(int i=1;i<=n;i++){
if(vis[i]==0&&fa[i]==u){
ans[i]=u;
dfs(i);
}
}
}
signed main() {
cin>>n>>m;
for(int i=1; i<=m; i++) {
int x,y;
cin>>x>>y;
t[x]++;//t[i]用来保存每一位的可支配者数量
fa[y]=x;//表示y可以被x支配
}
int maxn=0,bh;
for(int i=1;i<=n;i++){
if(t[i]>maxn){
maxn=t[i];
bh=i;
}
}
dfs(bh);//bh为最大值,即主根
for(int i=1;i<=n;i++){
if(ans[i]==0&&i!=bh)ans[i]=bh;//遇到未放入则归为主根
cout<<ans[i]<<" ";
}
return 0;
}