結果
問題 | No.1153 ねこちゃんゲーム |
ユーザー |
![]() |
提出日時 | 2020-08-09 01:30:57 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 623 ms / 2,500 ms |
コード長 | 2,360 bytes |
コンパイル時間 | 1,709 ms |
コンパイル使用メモリ | 135,688 KB |
最終ジャッジ日時 | 2025-01-12 19:14:41 |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 2 |
other | AC * 40 |
ソースコード
#include <cstdio>#include <cstring>#include <iostream>#include <string>#include <cmath>#include <bitset>#include <vector>#include <map>#include <set>#include <queue>#include <deque>#include <algorithm>#include <complex>#include <unordered_map>#include <unordered_set>#include <random>#include <cassert>#include <fstream>#include <utility>#include <functional>#include <time.h>#include <stack>#include <array>#define popcount __builtin_popcountusing namespace std;typedef long long int ll;typedef pair<int, int> P;int n, m;int a[200020];vector<int> g[200020];int dp[200020];void dfs(int x, int p){set<int> st;for(auto y:g[x]){if(y==p) continue;dfs(y, x);st.insert(dp[y]);}for(int i=0; ; i++){if(st.find(i)==st.end()){dp[x]=i;break;}}}int dp2[200020];int gr[200020];int par[200020];void dfs2(int x, int p){par[x]=p;map<int, int> mp;for(auto y:g[x]){if(y==p) mp[dp2[x]]++;else mp[dp[y]]++;}int mn;for(int i=0; ; i++){if(mp.find(i)==mp.end()){mn=i; break;}}gr[x]=mn;for(auto y:g[x]){if(y==p) continue;if(dp[y]>mn || mp[dp[y]]>1){dp2[y]=mn;}else{dp2[y]=dp[y];}}for(auto y:g[x]){if(y==p) continue;dfs2(y, x);}}int b[200020];int main(){cin>>n>>m;for(int i=0; i<m; i++){cin>>a[i]; a[i]--;b[a[i]]=i+1;}for(int i=0; i<n-1; i++){int u, v; cin>>u>>v;u--; v--;g[u].push_back(v);g[v].push_back(u);}dfs(0, -1);dfs2(0, -1);int s=0;for(int i=0; i<m; i++){s^=gr[a[i]];}if(s==0){cout<<-1<<" "<<-1<<endl;}else{for(int i=0; i<n; i++){if(!b[i]) continue;for(auto y:g[i]){if(y==par[i]){if((s^gr[i])==dp2[i]){cout<<b[i]<<" "<<y+1<<endl;return 0;}}else{if((s^gr[i])==dp[y]){cout<<b[i]<<" "<<y+1<<endl;return 0;}}}}}return 0;}