//Lukasz Janeczko Krakow #include <iostream> #include <vector> #include <algorithm> using namespace std; int g(int u, int l, int &n, vector <bool> &V, vector < pair <int,int> > &Edges) { if(l==2) { int v1, v2; for(int i=0; i<n; i++) if(!V[i]) v1=i; for(int i=n; i<2*n; i++) if(!V[i]) v2=i; pair <int,int> r1, r2; r1={v1,v2}; r2={v2,v1}; //cout << v1 << " " << v2 << " " << Edges[0].first << " " << Edges[0].second <<endl; if(binary_search(Edges.begin(),Edges.end(),r1)) return 2; if(binary_search(Edges.begin(),Edges.end(),r2)) return 0; return 1; } int e=0; for(int i=0; i<n; i++) if(!V[(1-u)*n+i]) { V[(1-u)*n+i]=true; e=max(e,2-g((u+1)%2,l-1,n,V,Edges)); V[(1-u)*n+i]=false; } //cout << u << " " << l << " " << e <<endl; return e; } int main() { ios_base::sync_with_stdio(false); int Z, n, m; cin >> Z; while(Z--) { cin >> n >> m; if(n>5) { vector <int> Deg_in(2*n,0); vector <int> Deg_out(2*n,0); for(int h=0; h<m; h++) { int a, b; char w; cin >> a >> w >> b; if(w=='<') { Deg_in[a-1]++; Deg_out[b-1+n]++; } else { Deg_in[b-1+n]++; Deg_out[a-1]++; } } int f=-1; bool good=true; //0-Bajtek, 1-Bitek for(int i=0; i<n && f==-1; i++) if(Deg_in[i]==n) f=1; for(int i=n; i<2*n && f==-1; i++) if(Deg_in[i]==n) f=0; if(f==-1) { for(int i=0; i<n && good; i++) if(Deg_in[i]==0) good=false; for(int i=n; i<2*n && good; i++) if(Deg_out[i]==0) good=false; if(good) f=1; } if(f==0) cout << "WYGRANA" <<endl; else if(f==1) cout << "PRZEGRANA" <<endl; else if(f==-1) cout << "REMIS" <<endl; } else { vector < pair <int,int> > Edges(m); for(int h=0; h<m; h++) { int a, b; char w; cin >> a >> w >> b; if(w=='<') Edges[h]={b-1+n,a-1}; else Edges[h]={a-1,b-1+n}; } sort(Edges.begin(),Edges.end()); vector <bool> V(2*n,false); int ans=g(0,2*n,n,V,Edges); if(ans==0) cout << "PRZEGRANA" <<endl; else if(ans==1) cout << "REMIS" <<endl; else if(ans==2) cout << "WYGRANA" <<endl; } } return 0; }
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | //Lukasz Janeczko Krakow #include <iostream> #include <vector> #include <algorithm> using namespace std; int g(int u, int l, int &n, vector <bool> &V, vector < pair <int,int> > &Edges) { if(l==2) { int v1, v2; for(int i=0; i<n; i++) if(!V[i]) v1=i; for(int i=n; i<2*n; i++) if(!V[i]) v2=i; pair <int,int> r1, r2; r1={v1,v2}; r2={v2,v1}; //cout << v1 << " " << v2 << " " << Edges[0].first << " " << Edges[0].second <<endl; if(binary_search(Edges.begin(),Edges.end(),r1)) return 2; if(binary_search(Edges.begin(),Edges.end(),r2)) return 0; return 1; } int e=0; for(int i=0; i<n; i++) if(!V[(1-u)*n+i]) { V[(1-u)*n+i]=true; e=max(e,2-g((u+1)%2,l-1,n,V,Edges)); V[(1-u)*n+i]=false; } //cout << u << " " << l << " " << e <<endl; return e; } int main() { ios_base::sync_with_stdio(false); int Z, n, m; cin >> Z; while(Z--) { cin >> n >> m; if(n>5) { vector <int> Deg_in(2*n,0); vector <int> Deg_out(2*n,0); for(int h=0; h<m; h++) { int a, b; char w; cin >> a >> w >> b; if(w=='<') { Deg_in[a-1]++; Deg_out[b-1+n]++; } else { Deg_in[b-1+n]++; Deg_out[a-1]++; } } int f=-1; bool good=true; //0-Bajtek, 1-Bitek for(int i=0; i<n && f==-1; i++) if(Deg_in[i]==n) f=1; for(int i=n; i<2*n && f==-1; i++) if(Deg_in[i]==n) f=0; if(f==-1) { for(int i=0; i<n && good; i++) if(Deg_in[i]==0) good=false; for(int i=n; i<2*n && good; i++) if(Deg_out[i]==0) good=false; if(good) f=1; } if(f==0) cout << "WYGRANA" <<endl; else if(f==1) cout << "PRZEGRANA" <<endl; else if(f==-1) cout << "REMIS" <<endl; } else { vector < pair <int,int> > Edges(m); for(int h=0; h<m; h++) { int a, b; char w; cin >> a >> w >> b; if(w=='<') Edges[h]={b-1+n,a-1}; else Edges[h]={a-1,b-1+n}; } sort(Edges.begin(),Edges.end()); vector <bool> V(2*n,false); int ans=g(0,2*n,n,V,Edges); if(ans==0) cout << "PRZEGRANA" <<endl; else if(ans==1) cout << "REMIS" <<endl; else if(ans==2) cout << "WYGRANA" <<endl; } } return 0; } |