HDU2094 产生冠军(拓扑排序)

题目连接

分析:

想了很多很多。全部WA了。。没想到是找入度为0的点。。如果个数为1个Yes,否则No。。(因为这题仅仅是找冠军而已)

#include <stdio.h>
#include <string.h>

#define MAXN 1005

int n, top_name, indegree[MAXN];
char name[MAXN][15];

void Init(){
    top_name = 0;
    memset(indegree, 0, sizeof(indegree));
}

int find_str(char *s){
    int i;
    for(i=0; i<top_name; i++){
        if(strcmp(name[i], s) == 0) break;
    }
    if(i==top_name){
        strcpy(name[top_name++], s);
    }
    return i;
}

int main(){
    int i, k, cnt, pos1, pos2;
    char s1[15], s2[15];

    while(scanf("%d", &n) == 1 && n){
        Init();
        for(i=0; i<n; i++){
            scanf("%s %s", s1, s2);
            pos1 = find_str(s1), pos2 = find_str(s2);
            indegree[pos2]++;
        }

        cnt = 0;
        for(i=0; i<top_name; i++){
            if(indegree[i] == 0){k = i; cnt++;}
            if(cnt > 1) break;
        }

        if(cnt == 1) printf("Yes\n");
        else printf("No\n");
    }

    return 0;
}
原文地址:https://www.cnblogs.com/tanhehe/p/2934234.html