HDOj 2094 产生冠军(拓扑排序)

2014-11-24 02:46:56 · 作者: · 浏览: 2

只需统计无没有前驱结点的结点个数即可,如果是环,是0个,如果有不确定的,那么肯定>1

利用STL里的map,string,set容器可以简洁地实现


代码如下:

\

[cpp]
#include
#include
#include
#include
using namespace std;

mapG;
setSet;
set::iterator p;

int main(){
int n,i;
string a;
string b;
//freopen("1.txt","r",stdin);
while(cin>>n,n){
G.clear();
Set.clear();
for(i=1;i<=n;i++){
cin>>a>>b;
Set.insert(a);
Set.insert(b);
G[b]=a;
}
i=0;
for(p=Set.begin();p!=Set.end();p++){
if(G[*p].length()==0)
i++;
}
if(i==1)
cout<<"Yes"< else
cout<<"No"< }
return 0;
}

#include
#include
#include
#include
using namespace std;

mapG;
setSet;
set::iterator p;

int main(){
int n,i;
string a;
string b;
//freopen("1.txt","r",stdin);
while(cin>>n,n){
G.clear();
Set.clear();
for(i=1;i<=n;i++){
cin>>a>>b;
Set.insert(a);
Set.insert(b);
G[b]=a;
}
i=0;
for(p=Set.begin();p!=Set.end();p++){
if(G[*p].length()==0)
i++;
}
if(i==1)
cout<<"Yes"< else
cout<<"No"< }
return 0;
}