7-9 谁是真正的首富 (25 分)

有n个富豪,他们聚在一起想要知道谁才是他们之中的最有钱的人,然而他们所有人都隐藏了家产,根据调查,你知道了m个富豪之间的的财富关系。现在你要根据已有的关系信息推理出这n个人之中谁才是真正的首富。
输入格式:
多组输入。每组第一行输入2个整数n,m(0<=m,n<=1000000),当n=m=0时结束输入。接下来m行,每行输入一个整数a(1<=a<=n),一个字符c,和一个整数b(1<=b<=n),表示编号为a的富豪与编号为b(a不等于b)的富豪的财富关系,关系只有两种:大于或是小于。保证输入关系无矛盾,如1>2,2>3,3>1这种情况是矛盾的。
输出格式:
若能推理出谁是首富,则输出首富的编号,否则输出“no solution”(不含双引号)。
样例输入
输入样例:
在这里给出一组输入。例如:
3 2
1 > 3
2 > 3
3 2
1 > 2
2 > 3

输出样例:
在这里给出相应的输出。例如:
no solution
1

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
using namespace std;
int main()
{
    int N,M,A,B;
    char ch[3];
    while(~scanf("%d%d",&N,&M) )
    {
        if(N == 0 && M == 0 )
            break;
        vector<int> in(N+1,0);
        while(M-- )
        {
            cin >> A >> ch >> B;
            if(ch[0] == '>' )
                in[B]++;
            else
                in[A]++;
        }
        int sum = 0,j = -1;
        for(int i = 1 ; i <= N ; i++ )
            if(!in[i] )
            {
                sum++;
                j = i;
            }
        if(sum != 1 )
            cout << "no solution" << endl;
        else
            cout << j << endl;
    }
    return 0;
}

猜你喜欢

转载自blog.csdn.net/weixin_43589396/article/details/88583243