Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <iostream>
- #include <vector>
- #include <string>
- #include <queue>
- using namespace std;
- vector <bool> konch1, konch2, used1, used2;
- vector <vector <int>> pereh1, pereh2;
- queue <pair <int, int>> Q;
- bool check(){
- Q.push(pair <int, int> (1, 1));
- pair <int, int> a;
- int x, y;
- while (!Q.empty()){
- a = Q.front();
- Q.pop();
- if(!a.first && !a.second){
- break;
- }
- if(konch1[a.first] != konch2[a.second]) return false;
- for(int i = 0; i < 26; i++){
- x = pereh1[i][a.first];
- y = pereh2[i][a.second];
- if((!used1[x] || !used2[y]) && (x != -1 || y != -1)){
- Q.push(pair <int, int> (x, y));
- }
- if(x != -1) used1[x] = true;
- if(y != -1) used2[y] = true;
- }
- }
- return true;
- }
- int main(){
- ifstream fin ("equivalence.in");
- ofstream fout ("equivalence.out");
- int n, m, k, a, b;
- fin >> n >> m >> k;
- konch1.resize(n+1);
- used1.resize(n+1);
- pereh1.resize(26);
- pereh2.resize(26);
- for(int i = 0; i < 26; i++){
- pereh1[i].resize(n+1);
- for(int j = 0; j <= n; j++){
- pereh1[i][j] = -1;
- }
- }
- for(int i = 0; i < k; i++){
- fin >> a;
- konch1[a] = true;
- }
- char c;
- for(int i = 0; i < m; i++){
- fin >> a >> b >> c;
- pereh1[c - 'a'][a] = b;
- }
- fin >> n >> m >> k;
- konch2.resize(n+1);
- used2.resize(n+1);
- for(int i = 0; i < 26; i++){
- pereh2[i].resize(n+1);
- for(int j = 0; j <= n; j++){
- pereh2[i][j] = -1;
- }
- }
- for(int i = 0; i < k; i++){
- fin >> a;
- konch2[a] = true;
- }
- for(int i = 0; i < m; i++){
- fin >> a >> b >> c;
- pereh2[c - 'a'][a] = b;
- }
- used1[0] = true;
- used2[0] = true;
- check() ? fout << "YES" : fout << "NO";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement