POJ 3660 Cow Contest (floyd變形)
阿新 • • 發佈:2018-12-11
題意:
有n(1<=n<=100)個學生參加程式設計比賽。
給出m條實力資訊。(1<=M<=4500)
其中每一條的格式為 A B (1<=A<=N,1<=B<=N,A!=B) 意思是A的實力比B強。
如果A比B強且B比C強,那麼A一定比C強。
問最後有多少名學生可以確定他的排名。
保證輸入資訊不存在矛盾
思路:
初始化有聯絡的點得邊為1,用floyd把有間接聯絡的點的邊(鄰接矩陣)賦值為1,最後掃一遍圖統計每個點有聯絡的點的總數,如果等於n-1,則cnt++。
#include<iostream> #include<cstring> using namespace std; int e[105][105]; int main() { int n,m; while(cin>>n>>m) { memset(e,0,sizeof(e)); for(int i=0;i<m;i++) { int a,b; cin>>a>>b; e[a][b]=1; } for(int k=1;k<=n;k++) { for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(e[i][k]&&e[k][j]) { e[i][j]=1; } } } } int flag=0,cnt=0,t1[105]={0}; for(int i=1;i<=n;i++) { for(int j=1;j<=n;j++) { if(e[i][j]) { t1[i]++,t1[j]++; } } } for(int i=1;i<=n;i++) { if(t1[i]==n-1) { cnt++; } } cout<<cnt<<endl; } return 0; }