奖金
弄了大半天,结果忘了调用数组。#include<iostream>#include<cstdio>
#include<string> #include<cstring> #include<algorithm> #include<vector> #include<queue> #include<math.h> using namespace std; int n,m,money[10009]; int f[10009][1009],son[10009],a[9000]; #define M 9999999 int ans=0; int main() { freopen("reward.in","r",stdin); freopen("reward.out","w",stdout); scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { int a,b; scanf("%d%d",&a,&b); f[b][++f[b][0]]=a; son[a]++; } int low=100,cnt=0,cnt1=0;
/* for(int k=1;k<=n;k++) { cnt1=0; for(int i=1;i<=n;i++) if(!son[i]) { cnt1++; a[cnt1]=i; cnt++; } for(int i=1;i<=cnt1;i++) { son[a[i]]=M; money[a[i]]=low; for(int j=1;j<=f[a[i]][0];j++) son[f[a[i]][j]]--; } low++; }
或
for(int i=1;i<=n;i++)
money[i]=100;
for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
if(!son[i])
{
cnt++;
son[i]=M;
for(int j=1;j<=f[i][0];j++)
{
money[f[i][j]]=max(money[f[i][j]],money[i]+1);
son[f[i][j]]--;
}
}
}
if(cnt<n) {cout<<"Poor Xed";return 0;}
for(int i=1;i<=n;i++) ans+=money[i]; cout<<ans; fclose(stdin);fclose(stdout); return 0; }
两种都行