Advertisement
lmarioza

Untitled

Aug 31st, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.42 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2. #define F first
  3. #define S second
  4. #define mp make_pair
  5. #define pb push_back
  6. #define INF 0x3f3f3f3f
  7. #define LINF 0x3f3f3f3f3f3f3f3fLL
  8.  
  9. using namespace std;
  10. typedef long long ll;
  11. typedef vector<int> vi;
  12. typedef set<int> si;
  13. typedef pair<int,int> ii;
  14. typedef vector<ii> vii;
  15. typedef map<string,int> msi;
  16. typedef map<int,int> mi;
  17.  
  18. vector<pair<int,bitset<26> > > grafo[210];
  19. bool vis[210];
  20.  
  21. bitset<26> dfs(int x,int y,bitset<26> e){
  22. vis[x] = true;
  23. if(x == y){
  24. vis[x]=false;
  25. return e;
  26. }
  27. bitset<26> ret;
  28. ret.reset();
  29. for(int i=0;i<grafo[x].size();i++){
  30. pair<int,bitset<26> > filho = grafo[x][i];
  31. if(!vis[filho.F]){
  32.  
  33. bitset<26> s = e;
  34. s &= filho.S;//intersect
  35.  
  36. s = dfs(filho.F,y,s);
  37.  
  38. ret |= s;
  39. }
  40. }
  41. vis[x]=false;
  42. return ret;
  43. }
  44.  
  45. int main(){
  46. ios_base::sync_with_stdio(false); cin.tie(NULL);
  47. int n;
  48. while(cin >>n &&n){
  49. for(int i =1;i<=n;i++){
  50. grafo[i].clear();
  51. }
  52. int a,b;
  53. while(cin >> a >> b && a){
  54. string e;
  55. cin >>e;
  56. bitset<26> s;
  57. s.reset();
  58. for(int i =0;i<e.size();i++){
  59. s[e[i]-'a'] = 1;
  60. }
  61. grafo[a].pb(mp(b,s));
  62. }
  63. while(cin >> a >> b && a){
  64. memset(vis,0,sizeof vis);
  65. bitset<26> s;
  66. s.set();
  67. s = dfs(a,b,s);
  68. if(s.none()) cout << "-\n";
  69. else {
  70. for(int i=0;i<26;i++){
  71. if(s[i])cout<<(char)('a'+i);
  72. }
  73. cout<<'\n';
  74. }
  75. }
  76. cout<<'\n';
  77.  
  78. }
  79. return 0;
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement