Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define F first
- #define S second
- #define mp make_pair
- #define pb push_back
- #define INF 0x3f3f3f3f
- #define LINF 0x3f3f3f3f3f3f3f3fLL
- using namespace std;
- typedef long long ll;
- typedef vector<int> vi;
- typedef set<int> si;
- typedef pair<int,int> ii;
- typedef vector<ii> vii;
- typedef map<string,int> msi;
- typedef map<int,int> mi;
- vector<pair<int,bitset<26> > > grafo[210];
- bool vis[210];
- bitset<26> dfs(int x,int y,bitset<26> e){
- vis[x] = true;
- if(x == y){
- vis[x]=false;
- return e;
- }
- bitset<26> ret;
- ret.reset();
- for(int i=0;i<grafo[x].size();i++){
- pair<int,bitset<26> > filho = grafo[x][i];
- if(!vis[filho.F]){
- bitset<26> s = e;
- s &= filho.S;//intersect
- s = dfs(filho.F,y,s);
- ret |= s;
- }
- }
- vis[x]=false;
- return ret;
- }
- int main(){
- ios_base::sync_with_stdio(false); cin.tie(NULL);
- int n;
- while(cin >>n &&n){
- for(int i =1;i<=n;i++){
- grafo[i].clear();
- }
- int a,b;
- while(cin >> a >> b && a){
- string e;
- cin >>e;
- bitset<26> s;
- s.reset();
- for(int i =0;i<e.size();i++){
- s[e[i]-'a'] = 1;
- }
- grafo[a].pb(mp(b,s));
- }
- while(cin >> a >> b && a){
- memset(vis,0,sizeof vis);
- bitset<26> s;
- s.set();
- s = dfs(a,b,s);
- if(s.none()) cout << "-\n";
- else {
- for(int i=0;i<26;i++){
- if(s[i])cout<<(char)('a'+i);
- }
- cout<<'\n';
- }
- }
- cout<<'\n';
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement