2235: Hero Pedigree -------------------------------------------------------------------------------- Result TIME Limit MEMORY Limit Run Times AC Times JUDGE 5s 8192K 338 131 Standard 欢迎大家来到skywind的英雄世界. 在这一系列题目中, 我们将和英雄们一起去冒险 在我们的世界中有很多英雄, 他们彼此有师承关系, 构成了英雄的谱系树. 如X是Y的老师, Y教授过Z等等, 并且不存在循环关系. 当然, 也有一些人是独行侠, 找不出门派. 如果说A是B的传人, 就意味着A的老师是B或者A的老师是B的传人. 我们的第一个问题就是, 给定一些已知的师承关系, 有多少种传人的说法可以是正确的. 由于有一些人的来历不清, 所以只要不和已知的信息相矛盾就是可能的. Input: 本题目包括多个Case。每个Case的第一行有2个数字m,n. m<30,代表有多少个人物。之后有n行, n<100, 每一行有2个整数i,j表示i是j的老师. 假定输入数据没有错误和重复. Output: 对于每一个Case, 输出有多少种可能正确的传人关系, 每个Case占据一行 Sample Input: 4 3 1 2 2 3 2 4 Sample Output: 7 Problem Source: skywind #include
#include
int main() { int a[40][40]; int i,j,k,n,m; while(scanf("%d%d",&n,&m)==2) { for(i=1;i<=n;i++)for(j=1;j<=n;j++)a[i][j]=123133131; while(m--) { scanf("%d%d",&i,&j); a[i][j]=1; } for(k=1;k<=n;k++)for(i=1;i<=n;i++)for(j=1;j<=n;j++) if(a[i][j]>a[i][k]+a[k][j]) a[i][j]=a[i][k]+a[k][j]; for(i=1;i<=n;i++)for(j=1;j<=n;j++) if(a[i][j]==123133131&&a[j][i]==123133131&&i!=j) a[i][j]=a[j][i]=1; int count=0; for(i=1;i<=n;i++)for(j=1;j<=n;j++) if(a[i][j]<123133131) count++; printf("%d/n",count); } return 0; }
2235: Hero Pedigree
最新推荐文章于 2022-07-31 12:43:30 发布