답안 #525386

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
525386 2022-02-11T13:57:18 Z Koosha_mv Designated Cities (JOI19_designated_cities) C++14
16 / 100
439 ms 84788 KB
#include <bits/stdc++.h>
using namespace std;
#define dbgv(v) cout<<#v<<" = "; f(i,0,v.size()) cout<<v[i]<<" "; cout<<endl
#define dbga(a,x,y) cout<<#a<<" = "; f(i,x,y) cout<<a[i]<<" "; cout<<endl
#define erorp(x) cout<<#x<<"={"<<(x.F)<<" , "<<x.S<<"}"<<endl
#define eror(x) cout<<#x<<'='<<(x)<<endl
#define f_(i,a,b) for(int i=a;i>=b;i--)
#define f(i,a,b) for(int i=a;i<b;i++)
#define nb(x) __builtin_popcount(x)
#define all(v) v.begin(),v.end()
#define bit(n,k) (((n)>>(k))&1)
#define Add(x,y) x=(x+y)%mod
#define maxm(a,b) a=max(a,b)
#define minm(a,b) a=min(a,b)
#define lst(x) x[x.size()-1]
#define sz(x) int(x.size())
#define mp make_pair
#define ll long long
#define pb push_back
#define S second
#define F first
#define int ll

const int N=1e6+99,inf=1e15;

int n,t,rt,X,Y,q,sum,to[N],w[N],res[N],ans[N],pes[N],h[N],mark[N],par[N];
pair<int,int> dp[N];
vector<int> g[N];

void dfs1(int u,int p){
	for(auto id : g[u]){
		int v=to[id];
		if(v==p) continue ;
		res[rt]+=w[id];
		dfs1(v,u);
	}
}
void dfs2(int u,int p){
	vector<pair<int,int> > vec(3);
	for(auto id : g[u]){
		int v=to[id];
		if(v==p) continue ;
		res[v]=res[u]-w[id]+w[id^1];
		dfs2(v,u);
		dp[v].F+=w[id];
		vec[0]=dp[v];
		sort(all(vec));
	}
	if(vec[2].S==0){
		dp[u]={0,u};
	}
	else{
		dp[u]=vec[2];
	}
	pes[u]=inf;
	if(vec[1].S!=0 && res[u]-vec[1].F-vec[2].F<ans[2]){
		ans[2]=res[u]-vec[1].F-vec[2].F;
		X=vec[1].S;
		Y=vec[2].S;
	}
	minm(ans[1],res[u]);
}
void dfs3(int u,int p){
	par[u]=p;
	for(auto id : g[u]){
		int v=to[id];
		if(v==p) continue ;
		dfs3(v,u);
		sum+=w[id];
	}	
}
void dfs4(int u,int p){
	//cout<<u<<" "<<h[u]<<endl;
	if(h[u]>h[X]){
		X=u;
	}
	for(auto id : g[u]){
		int v=to[id];
		if(v==p) continue ;
		if(!mark[v]){
			h[v]=h[u]+w[id];
		}
		else{
			h[v]=0;
		}
		dfs4(v,u);
	}
}
void find(){
	fill(ans,ans+N,inf);
	rt=1;
	dfs1(rt,0);
	dfs2(rt,0);
	rt=X;
	dfs3(rt,0);
	//cout<<rt<<" "<<sum<<endl;
	f(i,2,3){
		X=rt;
		dfs4(rt,0);
		sum-=h[X];
		ans[i]=sum;
		while(X){
			mark[X]=1;
			X=par[X];
		}
	}
}

main(){
	ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
	cin>>n;
	f(i,1,n){
		int u,v;
		cin>>u>>v>>w[2*i]>>w[2*i+1];
		to[2*i]=v;
		to[2*i+1]=u;
		g[u].pb(2*i);
		g[v].pb(2*i+1);
	}
	if(n==2){
		ans[1]=min(w[2],w[3]);
		cin>>q;
		while(q--){
			int x;
			cin>>x;
			cout<<ans[x]<<'\n';
		}
		exit(0);
	}
	find();

	cin>>q;
	while(q--){
		int x;
		cin>>x;
		cout<<ans[x]<<'\n';
	}
}

Compilation message

designated_cities.cpp:109:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  109 | main(){
      | ^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 23828 KB Output is correct
2 Incorrect 17 ms 31600 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 23756 KB Output is correct
2 Correct 306 ms 55620 KB Output is correct
3 Correct 427 ms 80708 KB Output is correct
4 Correct 298 ms 54596 KB Output is correct
5 Correct 307 ms 54924 KB Output is correct
6 Correct 337 ms 59688 KB Output is correct
7 Correct 237 ms 54776 KB Output is correct
8 Correct 430 ms 81360 KB Output is correct
9 Correct 162 ms 55144 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 12 ms 23796 KB Output is correct
2 Correct 322 ms 55748 KB Output is correct
3 Correct 439 ms 84788 KB Output is correct
4 Correct 316 ms 54596 KB Output is correct
5 Correct 289 ms 54732 KB Output is correct
6 Correct 339 ms 60164 KB Output is correct
7 Correct 171 ms 54996 KB Output is correct
8 Correct 390 ms 71952 KB Output is correct
9 Correct 159 ms 55208 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 23828 KB Output is correct
2 Incorrect 17 ms 31600 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 23756 KB Output is correct
2 Correct 306 ms 55620 KB Output is correct
3 Correct 427 ms 80708 KB Output is correct
4 Correct 298 ms 54596 KB Output is correct
5 Correct 307 ms 54924 KB Output is correct
6 Correct 337 ms 59688 KB Output is correct
7 Correct 237 ms 54776 KB Output is correct
8 Correct 430 ms 81360 KB Output is correct
9 Correct 162 ms 55144 KB Output is correct
10 Correct 12 ms 23796 KB Output is correct
11 Correct 322 ms 55748 KB Output is correct
12 Correct 439 ms 84788 KB Output is correct
13 Correct 316 ms 54596 KB Output is correct
14 Correct 289 ms 54732 KB Output is correct
15 Correct 339 ms 60164 KB Output is correct
16 Correct 171 ms 54996 KB Output is correct
17 Correct 390 ms 71952 KB Output is correct
18 Correct 159 ms 55208 KB Output is correct
19 Correct 15 ms 23712 KB Output is correct
20 Incorrect 310 ms 55664 KB Output isn't correct
21 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 23828 KB Output is correct
2 Incorrect 17 ms 31600 KB Output isn't correct
3 Halted 0 ms 0 KB -