1. 程式人生 > >hdu2094—看似拓撲實際上是一道思維題

hdu2094—看似拓撲實際上是一道思維題

pan blog space acm insert hdu2094 == sin typedef

HDU2094 產生冠軍

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2094

題意:中文題,就不解釋了。題意已經非常清楚了。

這道題的看起來像是一個拓撲排序的問題實際上拓撲感覺做不了,可能可以做了吧?但是我沒想到,估計也比較麻煩吧。這裏介紹一種比較簡單的做法,就是一種思維,如果存在冠軍(所有人都可以被他打敗),這個人肯定沒有敗過,而其他人都敗過,所以我們只需要確定所有人的人數,和敗者的人數(去重以後,所以需要用set,因為一個敗者會敗給多個人,所以在多個對局中出現)。如果所有人的數量與敗者的數量的差是1,說明存在冠軍,否則,不存在,直接看代碼吧!

//Author: xiaowuga
#include <bits/stdc++.h>
#define maxx INT_MAX
#define minn INT_MIN
#define inf 0x3f3f3f3f
const long long N=100;
using namespace std;
typedef long long L;
set<string>a,b;
int main() {
    ios::sync_with_stdio(false);cin.tie(0);
    int n;
    while(cin>>n&&n){
        a.clear();b.clear();
        
for(int i=0;i<n;i++){ string x,y; cin>>x>>y; a.insert(x); a.insert(y); b.insert(y); } if(a.size()-b.size()==1) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }

很簡單的一道題,主要靠思維吧,感覺和拓撲沒什麽關系。

hdu2094—看似拓撲實際上是一道思維題