产生冠军
HDU - 2094
拓扑排序。冠军只有一个,即要求入度为1的人只有一个。
选择
我的代码
#include<bits/stdc++.h>
using namespace std;
const int maxn = 505;
int n, m;
map<string, int>in, vis;
string name[maxn];
int main(){
string x, y;
while(cin >> n){
if(n == 0) break;
in.clear();
for(int i = 1; i <= n; i++){
cin >> x >> y;
in[y]++;
name[i] = x;
vis[name[i]] = 1;
}
int cnt = 0;
for(int i = 1; i <= n; i++){
if(in[name[i]] == 0 && vis[name[i]] == 1) {vis[name[i]] = 0; cnt++;}
}
if(cnt == 1) cout << "Yes" << endl;
else cout << "No" << endl;
}
}