/*
Zenit CK 2011/2012, uloha i)
Riesenie by Zemco
Na uplne pochopenie tohto riesenia si asi chcete zistit, co to je topologicke usporiadanie
orientovaneho grafu. Uvazujeme nachvilu len graf z orientovanych hran (odmyslime
si tie dvojsmerne, ktore mame rusit). Oznacme tento graf G'. Platia nasledovne tvrdenia:
1) Ak sa v grafe G' nenachadza cyklus, existuje topologicke usporiadanie grafu G'
2) Ak existuje topologicke usporiadanie grafu G', potom vieme doplnit dvojsmerne hrany s
jednym zrusenym smerom tak, aby nevznikol cyklus. Odpoved je teda 'existuje'
3) Ak sa v grafe G' nachadza cyklus, odpoved je urcite 'neexistuje'
Zaver: treba skontrolovat existenciu cyklu. moj kod ale priamo pre
nazornost skusa zostrojovat toplogicke usporiadanie (co je ekvivalentne).
*/
#include<cstdio>
#include<vector>
#include<queue>
#include<iostream>
#include<cstdlib>
using namespace std;
#define FOR(i,N) for(int i=0;i<(int)N;i++)
int N,M,K,TT;
vector<vector<int> > G;
//indegree, vstupny stupen
vector<int> ID;
//vratu true, ak existuje topologicke usporiadanie grafu.
bool top_sort(vector<vector<int> > &G, vector<int> &ID){
//fronta s vrcholmi, ktore mozeme zaradit to top. usporiadania a spracovat
queue<int> Q;
int N = G.size();
int processed = 0;
FOR(i,N) if (ID[i] == 0) Q.push(i);
while(!Q.empty()){
int p = Q.front();
Q.pop();
processed++;
FOR(i,G[p].size()){
//oslabime indegree o jedna
ID[G[p][i]]--;
//ak uz nic nespracovane do neho nesmeruje, mozeme spracovat aj jeho
if (ID[G[p][i]] == 0) Q.push(G[p][i]);
}
}
return processed == N;
}
int main(){
scanf("%d ",&TT);
FOR(tt,TT){
scanf("%d %d %d ",&N,&M,&K);
G = vector<vector<int> >(N,vector<int>(0));
ID = vector<int>(N,0);
FOR(i,M){
int x,y;
scanf("%d %d ",&x,&y);
x--; y--;
G[x].push_back(y);
ID[y]++;
}
FOR(i,K){
int x,y;
scanf("%d %d ",&x,&y);
}
bool ok = top_sort(G,ID);
if (ok) printf("existuje\n");
else printf("neexistuje\n");
}
}
LyoKICBaZW5pdCBDSyAyMDExLzIwMTIsIHVsb2hhIGkpCiAgUmllc2VuaWUgYnkgWmVtY28KCiAgTmEgdXBsbmUgcG9jaG9wZW5pZSB0b2h0byByaWVzZW5pYSBzaSBhc2kgY2hjZXRlIHppc3RpdCwgY28gdG8gamUgdG9wb2xvZ2lja2UgdXNwb3JpYWRhbmllIAogIG9yaWVudG92YW5laG8gZ3JhZnUuICAgVXZhenVqZW1lIG5hY2h2aWx1IGxlbiBncmFmIHogb3JpZW50b3ZhbnljaCBocmFuIChvZG15c2xpbWUKICBzaSB0aWUgZHZvanNtZXJuZSwga3RvcmUgbWFtZSBydXNpdCkuIE96bmFjbWUgdGVudG8gZ3JhZiBHJy4gUGxhdGlhIG5hc2xlZG92bmUgdHZyZGVuaWE6CgogIDEpIEFrIHNhIHYgZ3JhZmUgRycgbmVuYWNoYWR6YSBjeWtsdXMsIGV4aXN0dWplIHRvcG9sb2dpY2tlIHVzcG9yaWFkYW5pZSBncmFmdSBHJwogIDIpIEFrIGV4aXN0dWplIHRvcG9sb2dpY2tlIHVzcG9yaWFkYW5pZSBncmFmdSBHJywgcG90b20gdmllbWUgZG9wbG5pdCBkdm9qc21lcm5lIGhyYW55IHMgCiAgamVkbnltIHpydXNlbnltIHNtZXJvbSB0YWssIGFieSBuZXZ6bmlrb2wgY3lrbHVzLiBPZHBvdmVkIGplIHRlZGEgJ2V4aXN0dWplJwogIDMpIEFrIHNhIHYgZ3JhZmUgRycgbmFjaGFkemEgY3lrbHVzLCBvZHBvdmVkIGplIHVyY2l0ZSAnbmVleGlzdHVqZScKCiAgWmF2ZXI6IHRyZWJhIHNrb250cm9sb3ZhdCBleGlzdGVuY2l1IGN5a2x1LiBtb2oga29kIGFsZSBwcmlhbW8gcHJlCiAgbmF6b3Jub3N0IHNrdXNhIHpvc3Ryb2pvdmF0IHRvcGxvZ2lja2UgdXNwb3JpYWRhbmllIChjbyBqZSBla3ZpdmFsZW50bmUpLiAKICAgKi8KI2luY2x1ZGU8Y3N0ZGlvPgojaW5jbHVkZTx2ZWN0b3I+CiNpbmNsdWRlPHF1ZXVlPgojaW5jbHVkZTxpb3N0cmVhbT4KI2luY2x1ZGU8Y3N0ZGxpYj4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCiNkZWZpbmUgRk9SKGksTikgZm9yKGludCBpPTA7aTwoaW50KU47aSsrKQoKaW50IE4sTSxLLFRUOwp2ZWN0b3I8dmVjdG9yPGludD4gPiBHOwovL2luZGVncmVlLCB2c3R1cG55IHN0dXBlbgp2ZWN0b3I8aW50PiBJRDsKCi8vdnJhdHUgdHJ1ZSwgYWsgZXhpc3R1amUgdG9wb2xvZ2lja2UgdXNwb3JpYWRhbmllIGdyYWZ1Lgpib29sIHRvcF9zb3J0KHZlY3Rvcjx2ZWN0b3I8aW50PiA+ICZHLCB2ZWN0b3I8aW50PiAmSUQpewogIC8vZnJvbnRhIHMgdnJjaG9sbWksIGt0b3JlIG1vemVtZSB6YXJhZGl0IHRvIHRvcC4gdXNwb3JpYWRhbmlhIGEgc3ByYWNvdmF0CiAgcXVldWU8aW50PiBROwogIGludCBOID0gRy5zaXplKCk7CiAgaW50IHByb2Nlc3NlZCA9IDA7CiAgRk9SKGksTikgaWYgKElEW2ldID09IDApIFEucHVzaChpKTsKICB3aGlsZSghUS5lbXB0eSgpKXsKICAgIGludCBwID0gUS5mcm9udCgpOwogICAgUS5wb3AoKTsKICAgIHByb2Nlc3NlZCsrOwogICAgRk9SKGksR1twXS5zaXplKCkpewogICAgICAvL29zbGFiaW1lIGluZGVncmVlIG8gamVkbmEKICAgICAgSURbR1twXVtpXV0tLTsKICAgICAgLy9hayB1eiBuaWMgbmVzcHJhY292YW5lIGRvIG5laG8gbmVzbWVydWplLCBtb3plbWUgc3ByYWNvdmF0IGFqIGplaG8KICAgICAgaWYgKElEW0dbcF1baV1dID09IDApIFEucHVzaChHW3BdW2ldKTsKICAgIH0KICB9CiAgcmV0dXJuIHByb2Nlc3NlZCA9PSBOOwp9CgppbnQgbWFpbigpewogIHNjYW5mKCIlZCAiLCZUVCk7CiAgRk9SKHR0LFRUKXsKICAgIHNjYW5mKCIlZCAlZCAlZCAiLCZOLCZNLCZLKTsKICAgIEcgPSB2ZWN0b3I8dmVjdG9yPGludD4gPihOLHZlY3RvcjxpbnQ+KDApKTsKICAgIElEID0gdmVjdG9yPGludD4oTiwwKTsKICAgIEZPUihpLE0pewogICAgICBpbnQgeCx5OwogICAgICBzY2FuZigiJWQgJWQgIiwmeCwmeSk7CiAgICAgIHgtLTsgeS0tOwogICAgICBHW3hdLnB1c2hfYmFjayh5KTsKICAgICAgSURbeV0rKzsKICAgICB9CiAgICBGT1IoaSxLKXsKICAgICAgaW50IHgseTsKICAgICAgc2NhbmYoIiVkICVkICIsJngsJnkpOwogICAgfQogIAogICAgYm9vbCBvayA9IHRvcF9zb3J0KEcsSUQpOwogICAgaWYgKG9rKSBwcmludGYoImV4aXN0dWplXG4iKTsKICAgIGVsc2UgcHJpbnRmKCJuZWV4aXN0dWplXG4iKTsKICB9Cn0=