Advertisement
hieudoan

UVa 00872 Ordering

Aug 7th, 2018
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.75 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3.  
  4. int T;
  5. vector<int> nodes;
  6. vector< vector<int> > edges;  //phai la vector, vd TH A<B, A<C, B<C
  7. vector<bool> visited;
  8. bool flag;
  9. //edges[p]: ds những cái việc phải thực hiện sau p
  10. bool valid(){
  11.     int p,q;
  12.     for(int i=0;i<nodes.size();i++){
  13.         p=nodes[i];
  14.         if(!visited[p]){
  15.             for(int j=0;j<edges[p].size();j++){
  16.                 q=edges[p][j];
  17.                 if(visited[q]) return false;
  18.             }
  19.         }
  20.     }
  21.     return true;
  22. }
  23.  
  24. void tps(vector<int> &ans){
  25.     if(ans.size()==nodes.size()){
  26.         flag=true;
  27.         for(int i=0;i<nodes.size();i++){
  28.             if(i) cout<<" ";
  29.             cout<<char(ans[i]+'A');
  30.         }
  31.         cout<<endl;
  32.         return;
  33.     }
  34.  
  35.     int p,q;
  36.     for(int i=0;i<nodes.size();i++){
  37.         p=nodes[i];
  38.         if(!visited[p]){
  39.             visited[p]=true;  //gỉa sử thăm nó rồi ms xét hợp lệ hay ko chứ
  40.             if(valid()){
  41.                 ans.push_back(p);
  42.                 tps(ans);
  43.                 ans.pop_back();
  44.             }
  45.             visited[p]=false;
  46.         }
  47.     }
  48. }
  49.  
  50.  
  51. int main()
  52. {
  53.     // freopen("00872 in.txt","r",stdin);
  54.     cin>>T;
  55.     cin.ignore();  //ignore()\n after cin integer T
  56.     string str;
  57.     stringstream ss;
  58.     vector<int> ans;
  59.  
  60.     while(T--){
  61.         getline(cin,str);  //read the blank line
  62.  
  63.         nodes.clear();
  64.         edges.assign(26,vector<int> (0));
  65.         ans.clear();
  66.         visited.assign(26,false);
  67.  
  68.         getline(cin,str);
  69.         ss.clear();
  70.         ss.str("");
  71.         ss<<str;
  72.         char ch; int letter;
  73.         while(ss>>ch){
  74.             letter=ch-'A';
  75.             nodes.push_back(letter);
  76.         }
  77.  
  78.         getline(cin,str);
  79.         ss.clear();
  80.         ss.str("");
  81.         ss<<str;
  82.  
  83.         char ch1,op,ch2; int letter1,letter2;
  84.         while(ss>>ch1>>op>>ch2){
  85.             letter1=ch1-'A';
  86.             letter2=ch2-'A';
  87.             edges[letter1].push_back(letter2);
  88.         }
  89.         // xuat();
  90.         flag=false;
  91.         tps(ans);
  92.         if(!flag) cout<<"NO\n";
  93.         if(T) cout<<endl;
  94.     }
  95.  
  96.  
  97.     return 0;
  98. }
  99.  
  100. //hieudoanitus
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement