#include <vector>
#include <string>
#include <iostream>
using namespace std;
int n,m;
vector<string> a;
vector<vector<int> > rel;
vector<int> vis,ans,in;
void bfs(int i){
vis[i]=1;
for(int j=0;j<rel[i].size();j++){
in[rel[i][j]]--;
}
ans.push_back(i);
}
int fin(string s){
for(int i=0;i<n;i++){
if(a[i]==s)
return i;
}
}
int main(){
int cs=1;
while(cin>>n){
a.clear(),rel.assign(n,vector<int>()),vis.assign(n,0),in.assign(n,0),ans.clear();
for(int i=0;i<n;i++){
string s;
cin>>ws>>s;
a.push_back(s);
}
cin>>m;
for(int i=0;i<m;i++){
string s,t;
cin>>ws>>s>>ws>>t;
int x=fin(s),y=fin(t);
rel[x].push_back(y);
in[y]++;
}
for(int i=0;i<n;i++){
for(int i=0;i<n;i++){
if(!vis[i]&&in[i]==0){
bfs(i);
break;
}
}
}
cout<<"Case #"<<cs++<<": Dilbert should drink beverages in this order: ";
for(int i=0;i<n-1;i++)
cout<<a[ans[i]]<<' ';
cout<<a[ans[n-1]]<<'.'<<endl<<endl;
}
}
#include <string>
#include <iostream>
using namespace std;
int n,m;
vector<string> a;
vector<vector<int> > rel;
vector<int> vis,ans,in;
void bfs(int i){
vis[i]=1;
for(int j=0;j<rel[i].size();j++){
in[rel[i][j]]--;
}
ans.push_back(i);
}
int fin(string s){
for(int i=0;i<n;i++){
if(a[i]==s)
return i;
}
}
int main(){
int cs=1;
while(cin>>n){
a.clear(),rel.assign(n,vector<int>()),vis.assign(n,0),in.assign(n,0),ans.clear();
for(int i=0;i<n;i++){
string s;
cin>>ws>>s;
a.push_back(s);
}
cin>>m;
for(int i=0;i<m;i++){
string s,t;
cin>>ws>>s>>ws>>t;
int x=fin(s),y=fin(t);
rel[x].push_back(y);
in[y]++;
}
for(int i=0;i<n;i++){
for(int i=0;i<n;i++){
if(!vis[i]&&in[i]==0){
bfs(i);
break;
}
}
}
cout<<"Case #"<<cs++<<": Dilbert should drink beverages in this order: ";
for(int i=0;i<n-1;i++)
cout<<a[ans[i]]<<' ';
cout<<a[ans[n-1]]<<'.'<<endl<<endl;
}
}
Comments
Post a Comment