Submission #1276406

#TimeUsernameProblemLanguageResultExecution timeMemory
1276406warrennMagenta (COCI21_magenta)C++20
110 / 110
96 ms9432 KiB
#include <bits/stdc++.h> using namespace std; #define int long long const int maxn=1e5; int dist[maxn+2][2]; vector<pair<int,int> >adj[maxn+2]; int leng=0; int a,b; void dfs(int cur,int c,int par){ for(auto x : adj[cur]){ if(x.first==par)continue; if(x.first==b)leng=dist[cur][c]+1; if(x.second==1-c)continue; dist[x.first][c]=dist[cur][c]+1; dfs(x.first,c,cur); } } int siapa=0; bool oke=false; void solve(int cur,int par){ for(auto x : adj[cur]){ if(x.first==par || (dist[x.first][siapa]!=-1 && dist[x.first][siapa]<=dist[x.first][1-siapa]))continue; if(x.second==siapa)continue; if(dist[x.first][siapa]==-1 && dist[cur][siapa]==-1){ oke=true; } solve(x.first,cur); } } signed main(){ memset(dist,-1,sizeof dist); int n; cin>>n; cin>>a>>b; bool blue=false; bool red=false; for(int q=1;q<n;q++){ int u,v; cin>>u>>v; string s; cin>>s; int col=0; if(s[0]=='p'){ col=0; } else if(s[0]=='c'){ col=1; } else{ col=2; } adj[u].push_back({v,col}); adj[v].push_back({u,col}); if(col!=0 && (u==b || v==b))red=true; if(col!=1 && ((u==a && v!=b) || (u!=b && v==a)))blue=true; } if(blue==false){ cout<<"Marin"<<endl; return 0; } if(red==false){ cout<<"Paula"<<endl; return 0; } dist[a][0]=dist[b][1]=0; dfs(a,0,-1); dfs(b,1,-1); if(leng%2==1){ siapa=1; } else{ siapa=0; } if(siapa==0){ solve(b,-1); if(oke){ cout<<"Magenta"<<endl; } else{ cout<<"Paula"<<endl; } } else{ solve(a,-1); if(oke){ cout<<"Magenta"<<endl; } else{ cout<<"Marin"<<endl; } } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...