2235: Hero Pedigree

在skywind的英雄世界中,探索英雄之间的师承关系,通过输入已知的师承关系,计算有多少种可能的传承说法是正确的。利用图论算法解决实际问题,深入理解英雄世界的谱系构成。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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; }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值