POJ
来源:互联网 发布:2016淘宝如何打造爆款 编辑:程序博客网 时间:2024/06/10 13:01
题意:
给定两个人之间的胜负关系,问有几个人的名次可以确定
思路:
跑完 floyd,可以知道根据给定关系能推出来的所有胜负关系,
然后某个人跟其他 n-1 个人的胜负关系可知的话,他的名次就是可知的
#include<iostream>#include<algorithm>#include<cstdio>#include<cstdlib>#include<cstring>#include<string>#include<cmath>#include<set>#include<queue>#include<stack>#include<map>#define PI acos(-1.0)#define in freopen("in.txt", "r", stdin)#define out freopen("out.txt", "w", stdout)using namespace std;typedef long long ll;typedef unsigned long long ull;const int maxn = 100 + 7, maxd = (1<<18)-1, mod = 1e9 + 7;const int INF = 0x7f7f7f7f;int n, m;bool f[maxn][maxn];void init() { memset(f, 0, sizeof f); for(int i = 0; i < m; ++i) { int u, v; scanf("%d %d", &u, &v); f[u][v] = true; }}void solve() { for(int k = 1; k <= n; ++k) { for(int i = 1; i <= n; ++i) { if(i == k) continue; for(int j = 1; j <= n; ++j) { if(j == k || j == i) continue; if(f[i][k] && f[k][j]) f[i][j] = true; } } }// for(int i = 1; i <= n; ++i) {// for(int j = 1; j <= n; ++j)// cout << f[i][j] << " ";// cout << endl;// } int ans = 0; for(int i = 1; i <= n; ++i) { int flag = 1; for(int j = 1; j <= n; ++j) { if(i == j) continue; if(!f[i][j] && !f[j][i]) { flag = 0; break; } } if(flag) ans++; } cout << ans << endl;}int main() { while(~scanf("%d %d", &n, &m) && n+m) { init(); solve(); } return 0;}
阅读全文
1 0
- POJ
- poj
- POJ
- POJ
- poj
- poj
- POJ
- POJ
- poj
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- POJ
- 初学C语言
- 线程
- 运算符的重载
- Java设计模式(6)——观察者模式
- Understanding and Diagnosing Visual Tracking Systems
- POJ
- 关于数组名与指针的再学习
- 开头
- HTTPS和HTTP的区别
- 【Ubuntu】奇技淫巧-代码雨&小火车
- 子集生成——二进制方法与递归方法
- 8.5 switch...case语句注意问题
- 【网络编程】处理定时事件(三)---看看Libco的时间轮
- 如何测试http接口 日记一