poj 3660 传递闭包 **

题意:题目给出了m对的相对关系,求有多少个排名是确定的。

链接:点我

如果这个点到其他点的关系是确定的,那么这个点就是确定的,注意如果这个点到不了其他点,但其他点能到这个点,那么这个点和其他点的关系是确定的

样例图:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<queue>
 7 #include<map>
 8 using namespace std;
 9 #define MOD 1000000007
10 #define pb(a) push_back(a)
11 const int INF=0x3f3f3f3f;
12 const double eps=1e-5;
13 typedef long long ll;
14 #define cl(a) memset(a,0,sizeof(a))
15 #define ts printf("*****\n");
16 const int MAXN=110;
17 int n,m,tt,cnt;
18 int g[MAXN][MAXN];
19 int main()
20 {
21     int i,j,k;
22     #ifndef ONLINE_JUDGE
23     freopen("1.in","r",stdin);
24     #endif
25     while(scanf("%d%d",&n,&m)!=EOF)
26     {
27         int a,b;
28         cl(g);
29         for(i=0;i<m;i++)
30         {
31             scanf("%d%d",&a,&b);
32             g[a][b]=1;
33         }
34         for(k=1;k<=n;k++)
35             for(i=1;i<=n;i++)
36                 for(j=1;j<=n;j++)
37                     if(g[i][k]==1&&g[k][j]==1)  g[i][j]=1;
38         int tot=0;
39         for(i=1;i<=n;i++)
40         {
41             bool flag=1;
42             for(j=1;j<=n;j++)
43             {
44                 if(i==j)    continue;
45                 if(g[i][j]==0&&g[j][i]==0)
46                 {
47                     flag=0;
48                     break;
49                 }
50             }
51             if(flag)
52             {
53                 tot++;
54             }
55         }
56         printf("%d\n",tot);
57     }
58 }
时间: 2024-10-03 17:16:45

poj 3660 传递闭包 **的相关文章

poj 3660 Cow Contest(warshall算法)

poj 3660 Cow Contest Description N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a programming contest. As we all know, some cows code better than others. Each cow has a certain constant skill rating that is unique among the co

POJ 3660 (Floyd判断传递闭包)

题目:输入n头牛,m个关系.接下来m行每行两个int数a,b,代表a可以打败b 问:能确定多少头牛的排名 思路:floyd算法可以判断传递闭包问题(通过传递性推导出尽量多的元素之间的关系叫做传递闭包),模板题 #include <iostream> #include <cmath> #include <cstdio> #include <cstring> #include <string> #include <map> #includ

floyd 传递闭包 POJ - 3660

https://vjudge.net/problem/POJ-3660 传递闭包 ,就是把具有传递性的关系传递开,通过一些已知的连边求出点与点之间的关系. 设f[i][j]表示i 与 j 是否联通,f[i][j]=f[i][k]&&f[k][j] 再分析每个点,如果能确定 n-1 个关系,那就可以确定他的排名. 时间复杂度O(N^3) #include <iostream> #include <cstdio> #include <cstring> #in

Cow Contest POJ - 3660 floyd传递闭包

#include<iostream> #include<cstring> using namespace std; const int N=110,INF=0x3f3f3f3f; int f[N][N]; int main() { int n,m; cin>>n>>m; memset(f,0x3f,sizeof f); int x,y; for(int i=0;i<m;i++) { cin>>x>>y; //x>y f[x

POJ 2594 传递闭包的最小路径覆盖

Treasure Exploration Time Limit: 6000MS   Memory Limit: 65536K Total Submissions: 7171   Accepted: 2930 Description Have you ever read any book about treasure exploration? Have you ever see any film about treasure exploration? Have you ever explored

poj 2594 传递闭包+最大路径覆盖

由于路径可以有重复的点,所以需要将间接相连的点连接 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #include<iostream> 5 using namespace std; 6 //顶点编号从0开始的 7 const int MAXN=510; 8 int uN,vN;//u,v数目 9 int g[MAXN][MAXN]; 10 int linker[MAXN];

ACM: POJ 3660 Cow Contest - Floyd算法

链接 Cow Contest Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Description N (1 ≤ N ≤ 100) cows, conveniently numbered 1..N, are participating in a programming contest. As we all know, some cows code better than others. Eac

kuangbin_ShortPathH (POJ 3660)

本来想自己写个bfs让他顺着胜负边爬 走到拐弯处就判定无法确定次序 然后我发现有多余的边并不会自己省略掉 要写个O(n^3)的删掉多余边这都不如Floyd了 看奚政学长写的是拓扑序也能解 然后在理解看他的文章的时候智商下线了 Floyd都没认出来 最后自己写了个(标准)Floyd 华丽得wa了 然后查出来是i j k 次序写的不好 嗯原始算法还是要复习一下的 有空去学一下拓扑序解法 以上 #include <cstdio> #include <cstring> int main()

POJ 3660

233333... Description: 就是说呢.牛是的实力室友大小之分的.然后呢.告诉你很多pair 表示任意两头牛之间的实力大小.按实力排序之后.问你一共有多少只牛的排名是确定了的. T_T == 坑了好多WA....应该是 = 好吧..貌似是拓扑排序的floyd算法..数据太小..三重循环水过.就是判断有多少只牛的入度出度和是n-1就欧克了.... 代码: #include<stdio.h>#include<iostream>#include<string.h&g