Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<cstdio>
- #include<map>
- #include<vector>
- #include<string>
- #include<iostream>
- using namespace std;
- void dfs(int a);
- vector<int> node[110];
- int dis[110],fin[110];
- string col[100];
- int time;
- int main()
- {
- map<string,int>mymap;
- int k,t,num,i,add,temp,c=0;
- string ch,ch1;
- string str[110];
- //freopen("input.txt","r",stdin);
- while(scanf("%d",&num)==1){
- c++;
- for(i=1;i<=num;i++){
- cin>>ch;
- str[i]=ch;
- mymap[ch]=i;
- col[i]="nil";
- }
- for(i=1;i<=num;i++){
- }
- scanf("%d",&add);
- for(i=1;i<=add;i++){
- cin>>ch>>ch1;
- node[mymap[ch]].push_back(mymap[ch1]);
- col[mymap[ch1]]="white";
- }
- for(i=1;i<=num;i++){
- if(col[i]=="nil"){
- dfs(i);
- }
- }
- k=num;
- while(k!=0){
- t=0;
- for(i=1;i<=k-1;i++){
- if(fin[i]<fin[i+1]){
- temp=fin[i];
- ch=str[i];
- str[i]=str[i+1];
- fin[i]=fin[i+1];
- fin[i+1]=temp;
- str[i+1]=ch;
- t=i;
- }
- }
- k=t;
- }
- printf("Case #%d: Dilbert should drink beverages in this order: ",c);
- for(i=1;i<num;i++){
- cout<<str[i]<<" ";
- }
- cout<<str[num]<<".\n\n";
- mymap.clear();
- for(i=1;i<=num;i++){
- node[i].clear();
- }
- }
- return 0;
- }
- void dfs(int a){
- col[a]="grey";
- dis[a]=++time;
- for(int x=0;x<node[a].size();x++){
- if(col[node[a][x]]=="white"){
- dfs(node[a][x]);
- }
- }
- col[a]="black";
- fin[a]=++time;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement