hdu 1704 Rank
2014-08-26 18:22
323 查看
题目链接:点击打开链接
题意:对于n个选手给出m场比赛的结果,结果有传递性,问有多少对选手不能判断他们之间的胜负关系
用a[i][j]表示i是否胜过j
把所有结果输入后用一个三重循环更新每两个选手间是否有胜负关系。全部更新完后枚举记录结果,再把结果除2即可。
三重循环中和最短路的floyd一样,要把中间点放在最外层循环,否则会wa。
代码:
题意:对于n个选手给出m场比赛的结果,结果有传递性,问有多少对选手不能判断他们之间的胜负关系
用a[i][j]表示i是否胜过j
把所有结果输入后用一个三重循环更新每两个选手间是否有胜负关系。全部更新完后枚举记录结果,再把结果除2即可。
三重循环中和最短路的floyd一样,要把中间点放在最外层循环,否则会wa。
代码:
#include <iostream> #include <cstdio> #include <cstring> using namespace std; bool a[505][505]; int main(){ int T; cin>>T; while(T--){ memset(a,0,sizeof(a)); int n,m; scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ int s,t; scanf("%d%d",&s,&t); a[s][t]=1; } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(a[j][i]){ for(int k=1;k<=n;k++){ if(a[i][k]) a[j][k]=1; } } } } int res=0; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ if(i==j)continue; if(!a[i][j]&&!a[j][i]){ res++; } } } res/=2; printf("%d\n",res); } return 0; }
相关文章推荐
- hdu 1704 Rank(floyd传递闭包)
- HDU 1704 Rank
- HDU 1704 Rank (floyd传递闭包)
- HDU 1704 Rank【传递闭包】
- hdu - 1704 Rank(简单dfs)
- HDU 1704 Rank (关系闭包)
- HDU 1704 Rank floyd求传递闭包 || bfs
- hdu-1704 Rank
- hdu 1704 Rank (floyd闭包)
- HDU 1704 rank(floyd闭包+剪枝)
- hdu 1704 rank 传递闭包
- HDU 1704 Rank(求闭包)
- HDU 1704 Rank (传递闭包)
- HDU 1811 Rank of Tetris
- hdu 1342+hdu 2660+hdu 2266+hdu 1704+hdu 1627+hdu 1539
- HDU - 4417 Super Mario (区间询问rank)
- HDU 1811 Rank of Tetris
- hdu 1811 Rank of Tetris
- HDOJ(HDU) 1718 Rank(水题、、、)
- hdu 1811 Rank of Tetris