Uva 11060 Beverages Solution

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

Comments