有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;
}