QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#114560 | #852. Jellyfish | EastKing# | RE | 0ms | 0kb | C++17 | 1.6kb | 2023-06-22 16:35:11 | 2023-06-22 16:35:13 |
Judging History
answer
#include<bits/stdc++.h>
using namespace std;
const int M=2e5+5;
int n;
int head[M],asdf,du[M];
struct edge{
int to,nxt;
}G[M<<1];
void add_edge(int a,int b){
G[++asdf].to=b;
G[asdf].nxt=head[a];
head[a]=asdf;
}
int par[M];
int get_fa(int x){
if(par[x]==x)return x;
return par[x]=get_fa(par[x]);
}
int fa[M],dep[M];
void dfs(int x,int f){
fa[x]=f;
dep[x]=dep[f]+1;
for(int i=head[x];i;i=G[i].nxt){
int y=G[i].to;
if(y==f)continue;
dfs(y,x);
}
}
int stk1[M],stk2[M];
int calc(int a,int b){
int top1=0,top2=0;
while(a!=b){
if(dep[a]>=dep[b]){
stk1[++top1]=a;
a=fa[a];
}else {
stk2[++top2]=b;
b=fa[b];
}
}
stk1[++top1]=a;
while(top2>0)stk1[++top1]=stk2[top2--];
int len=0;
for(int i=1;i<=top1;i++){
int x=stk1[i];
if(du[x]>2){
stk2[++len]=i;
}
}
int ans=0;
for(int i=1;i<=n;i++)ans+=(du[i]==1);
if(len==0){
return 3;
}else if(len==1){
return ans+2;
}else {
int mx=0;
stk2[0]=stk2[len]-len;
for(int i=1;i<=len;i++){
mx=max(mx,(stk2[i]-stk2[i-1]-1));
}
return ans+mx;
}
}
void solve(){
asdf=0;
for(int i=1;i<=n;i++){
head[i]=0;
du[i]=0;
par[i]=i;
}
int ea=0,eb=0;
for(int i=1;i<=n;i++){
int a,b;
scanf("%d %d",&a,&b);
du[a]++;
du[b]++;
int x=get_fa(a);
int y=get_fa(b);
if(x==y){
ea=a;
eb=b;
}else {
par[x]=y;
add_edge(a,b);
add_edge(b,a);
}
}
dfs(1,0);
printf("%d\n",calc(ea,eb));
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
int cas;
cin>>cas;
while(cas--){
cin>>n;
solve();
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Runtime Error
input:
2 6 1 2 2 3 3 4 4 1 2 5 2 6 4 1 2 2 3 3 4 4 1