Submission #1335740

#TimeUsernameProblemLanguageResultExecution timeMemory
1335740boclobanchatMeetings (JOI19_meetings)C++20
0 / 100
191 ms327680 KiB
#include"meetings.h"
#include<bits/stdc++.h>
using namespace std;
const int MAXN=2025;
set<int> st[MAXN];
bool ck[MAXN],kc[MAXN];
pair<int,int> mx;
int root[MAXN];
void dfs(int i,int pre,int d)
{
	root[i]=pre,mx=max(mx,{d,i});
	for(auto v:st[i]) if(v!=pre&&kc[v]) dfs(v,i,d+1);
}
void addedge(int l,int r)
{
	st[l].insert(r),st[r].insert(l);
}
void deledge(int l,int r)
{
	st[l].erase(r),st[r].erase(l);
}
void Solve(int N)
{
	addedge(0,1);
	ck[0]=ck[1]=true;
	for(int i=2;i<N;i++) if(!ck[i])
	{
		for(int j=0;j<N;j++) kc[j]=ck[j];
		int rt=0;
		while(true)
		{
			mx={-1,-1};
			dfs(rt,rt,0);
			int pos=mx.second;
			mx={-1,-1};
			dfs(pos,pos,0);
			int pos2=mx.second;
			if(pos==pos2)
			{
				addedge(i,pos);
				break;
			}
			int res=Query(pos,pos2,i);
			while(pos2!=pos) kc[pos2]=false,pos2=root[pos2];
			kc[pos]=false,pos2=mx.second;
			if(ck[res]) kc[res]=true,rt=res;
			else
			{
				ck[res]=true;
				deledge(pos,pos2);
				addedge(pos,res);
				addedge(pos2,res);
				addedge(i,res);
				break;
			}
		}
		ck[i]=true;
	}
	for(int i=0;i<N;i++) for(auto v:st[i]) if(i<v) Bridge(i,v);
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...