//usaco2-3-5 控制公司
#include<iostream>
#include<cstdio>
#include<cstring>
int n,m,tot=0;
int f[10100],a[10100],nxt[10100],c[10100],v[101000],head[101000],visit[101000];
void add_edge(int x,int y,int z){v[++tot]=y;c[tot]=z;nxt[tot]=head[x];head[x]=tot;}
void dfs(int x)
{
if (f[x]) return;f[x]=1;
for (int i=head[x];i;i=nxt[i])
{
int y=v[i];
a[y]+=c[i];
if (a[y]>=50) dfs(y);
}
}
int main()
{
scanf("%d",&m);
for (int i=1,x,y,z;i<=m;i++)
{
scanf("%d%d%d",&x,&y,&z);
add_edge(x,y,z);
visit[x]=1;n=(std::max(y,std::max(x,n)));
}
for (int i=1;i<=n;i++)
{
if (!visit[i]) continue;
memset(f,0,sizeof(f));
memset(a,0,sizeof(a));
dfs(i);
for (int j=1;j<=n;j++)
if (j!=i&&f[j]) printf("%d %d\n",i,j);
}
return 0;
}
【USACO2-3-5】控制公司 dfs
最新推荐文章于 2021-08-17 15:47:47 发布