QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#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();
}
详细
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'