QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#882944 | #8331. Bot Brothers | ucup-team5077# | WA | 58ms | 13752kb | C++14 | 3.5kb | 2025-02-05 13:47:33 | 2025-02-05 13:47:34 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define int128 __int128
const int N=1e5+5;
ll n,supd[N],m,fa[N],dep[N ],vis[N ],id[N],deg[N],rk[N],rem[N];
vector<int> g[N];
void dfs0(int u){
for(auto v:g[u]){
if(v == fa[u])continue;
//if(id[v]==-1)continue;
fa[v]=u;
dfs0(v);
}
}
void dfs(int u){
rem[u]=1;
if(id[u])return;
for(auto v:g[u]){
if(v == fa[u])continue;
//if(id[v]==-1)continue;
fa[v]=u;
dep[v]=dep[u]+1;
//printf("v=%d,dep[%d]=%lld\n",v,v,dep[v]);
dfs(v);
}
}
vector<ll> d[N ];
/*void dfs2(int u){
for(auto v:g[u]){
if(v == fa[u])continue;
dfs2(v);
}
}*/
void solve(){
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++){
g[i].clear();
d[i].clear();
vis[i]=0;
id[i]=0;
rem[i]=0;
supd[i]=0;
dep[i]=0;
rk[i]=0;
}
for(int i=1;i<=m;i++){
supd[i]=i+1;
id[i]=i;
rk[i]=i;
}
for(int i=1;i<n;i++){
int u,v;
scanf("%d%d",&u,&v );
g[u].push_back(v);
g[v].push_back(u);
}
dfs0(n);
vector<int> d1;
for(int i=1;i<=n;i++){
deg[i]=g[i].size();
if(g[i].size()==1)d1.push_back(i);
}
while(!d1.empty()){
int u = d1.back();
d1.pop_back();
if(g[fa[u ]].size() != 2 || fa[u]==n)continue;
id[fa[u]]=id[u];
rk[id[u]]=fa[u];
//id[u]=-1;
deg[fa[u]]--;
if(deg[fa[u ]]==1){
d1.push_back(fa[u]);
}
}
/*for(int i=1;i<=n;i++){
printf("id[%d]=%lld\n",i,id[i]);
}
for(int i=1;i<=m;i++){
printf("rk[%d]=%lld\n",i,rk[i]);
}*/
dep[n ]=0;
dfs(n );
vector<int> to_op;
ll mxdep=0;
for(int i=1;i<=n;i++){
//printf("dep[%d]=%lld,rem[%d]=%lld\n",i,dep[i],i,rem[i]);
if(!rem[i])continue;
mxdep = max(mxdep,dep[i]);
}
for(int i=1;i<=n;i++){
if(!rem[i])continue;
if(dep[i]==mxdep){
to_op.push_back(i);
supd[i]=rk[(i)%m+1];
}
else{
if(id[i]){
//d[dep[i]].push_back(i);
//printf("leaf not equal\n");
printf("Tie\n");
return;
}
}
}
while(mxdep--){
//for(int i=1;i<=n;i++){
//printf("supd[%d]=%lld\n",i,supd[i]);
//}
vector<int> nxt;
for(auto u:to_op ){
if(supd[u] != -1)supd [u] = fa[supd[u]];
if(!vis[fa[u ]]){
nxt.push_back(fa[u ]);
vis[fa[u]]=1;
}
}
for(auto u:nxt){
for(auto v:g[u]){
if(v == fa[u])continue;
if(!supd[u])supd[u]=supd[v];
else{
if(supd[v]==-1)supd[u]=-1;
else if(supd[v] != supd[u]){
supd[u]=-1;
}
}
}
}
to_op.clear();
for(auto u:nxt){
to_op.push_back(u);
}
}
//for(int i=1;i<=n;i++){
// printf("supd[%d]=%lld\n",i,supd[i]);
// }
if(supd[n ] == n){
printf("Doddle\n");
}
else{
printf("Tie\n");
}
}
int main(){
int T;
cin >> T;
while(T--)solve();
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 13588kb
input:
2 6 3 1 4 2 4 3 5 5 6 4 6 5 4 1 5 2 5 3 5 4 5
output:
Tie Doddle
result:
ok 2 tokens
Test #2:
score: -100
Wrong Answer
time: 58ms
memory: 13752kb
input:
51362 10 3 1 6 2 4 3 5 4 10 5 10 6 7 7 8 8 9 9 10 10 5 1 6 2 8 3 6 4 6 5 7 6 7 7 9 8 10 9 10 10 4 1 6 2 5 3 7 4 7 5 9 6 7 7 8 8 10 9 10 10 5 1 6 2 7 3 8 4 10 5 6 6 9 7 8 8 10 9 10 10 4 1 5 2 7 3 10 4 6 5 6 6 8 7 9 8 10 9 10 10 5 1 6 2 8 3 8 4 8 5 6 6 7 7 9 8 9 9 10 10 4 1 5 2 6 3 7 4 10 5 6 6 8 7 9 ...
output:
Doddle Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Doddle Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Doddle Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie Tie...
result:
wrong answer 97th words differ - expected: 'Tie', found: 'Doddle'