poj 3660 Cow Contest floyd

来源:互联网 发布:包租婆租房软件管理 编辑:程序博客网 时间:2024/04/27 19:32

这道题目需要知道每两个点之间的关系,以此来判断这两个点是否有上下等级的关系,很明显,可以用到floyd算

法,运用传递背包的性质,就可以算出来,每两个点的关系,只要一个点与其他点的关系都存在,那么这个点的等级

就可以确定了。

代码:

#include<iostream>#include<cstdio>#include<cstdlib>#include<cstring>#include<cmath>#include<vector>#include<set>#include<string>#include<algorithm>#define MAX 0x7fffffffusing namespace std;int gra[105][105]; int main(){int n,m ,cnt,i,j,k,a,b;while(cin >> n >>m){cnt = 0;memset(gra,0,sizeof(gra));for(i=1; i<=m; i++){cin >> a >> b;gra[a][b] = 1;//a 是 b的父节点 gra[b][a] = -1;//a 是 b的子节点 }for(k=1; k<=n; k++)for(i=1; i<=n; i++)for(j=1; j<=n; j++)if(gra[i][k] == -1 && gra[k][j] == -1)gra[i][j] = -1;else if(gra[i][k] == 1 && gra[k][j] == 1)gra[i][j] = 1;int flag;for(i=1; i<=n; i++){flag = 0;for(j=1; j<=n; j++){if(j!=i){if(gra[i][j] == 0){flag = 1;break;}}}if(!flag){cnt ++;}}cout << cnt << endl;}return 0;}


0 0