結果
| 問題 |
No.2800 Game on Tree Inverse
|
| コンテスト | |
| ユーザー |
沙耶花
|
| 提出日時 | 2024-06-28 22:14:38 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
MLE
|
| 実行時間 | - |
| コード長 | 1,717 bytes |
| コンパイル時間 | 4,430 ms |
| コンパイル使用メモリ | 262,872 KB |
| 最終ジャッジ日時 | 2025-02-22 01:10:48 |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 1 MLE * 1 -- * 62 |
ソースコード
#include <stdio.h>
#include <bits/stdc++.h>
#include <atcoder/all>
using namespace atcoder;
using mint = modint998244353;
using namespace std;
#define rep(i,n) for (int i = 0; i < (n); ++i)
#define Inf32 1000000001
#define Inf64 1000000000000000001
vector<vector<int>> gs;
vector<vector<vector<int>>> vs;
vector<vector<int>> E;
int G[200005];
void dfs(int cv,int pv){
vector<int> nxt;
int X = 0;
rep(i,E[cv].size()){
int to = E[cv][i];
if(to==pv)continue;
dfs(to,cv);
nxt.push_back(to);
X ^= G[to];
}
set<int> tt;
rep(i,nxt.size()){
rep(j,gs[nxt[i]].size()){
gs[nxt[i]][j] ^= X ^ G[nxt[i]];
tt.insert(gs[nxt[i]][j]);
}
}
tt.insert(X);
vector<int> ngs;
for(auto it=tt.begin();it!=tt.end();it++){
ngs.push_back(*it);
}
gs[cv] = ngs;
vs[cv].resize(ngs.size());
rep(i,nxt.size()){
rep(j,gs[nxt[i]].size()){
int d = lower_bound(ngs.begin(),ngs.end(),gs[nxt[i]][j])-ngs.begin();
if(vs[cv][d].size() < vs[nxt[i]][j].size()){
swap(vs[cv][d],vs[nxt[i]][j]);
}
while(vs[nxt[i]][j].size()){
int v = vs[nxt[i]][j].back();
vs[nxt[i]][j].pop_back();
vs[cv][d].push_back(v);
}
}
gs[nxt[i]].clear();
vs[nxt[i]].clear();
}
rep(i,ngs.size()){
if(ngs[i]==X){
vs[cv][i].push_back(cv);
}
}
rep(i,1000000){
if(i>=ngs.size() || ngs[i]!=i){
G[cv] = i;
break;
}
}
}
int main(){
int n;
cin>>n;
gs.resize(n);
vs.resize(n);
E.resize(n);
rep(i,n-1){
int a,b;
cin>>a>>b;
a--,b--;
E[a].push_back(b);
E[b].push_back(a);
}
dfs(0,-1);
sort(vs[0][0].begin(),vs[0][0].end());
cout<<"Alice"<<endl;
cout<<vs[0][0].size()<<endl;
rep(i,vs[0][0].size()){
if(i!=0)cout<<' ';
cout<<vs[0][0][i]+1;
}
cout<<endl;
return 0;
}
沙耶花