답안 #525381

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
525381 2022-02-11T13:51:30 Z Koosha_mv Designated Cities (JOI19_designated_cities) C++14
16 / 100
334 ms 80036 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){
	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^1];
		}
		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);
	f(i,2,n+1){
		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:107:1: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  107 | main(){
      | ^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 23756 KB Output is correct
2 Incorrect 17 ms 31664 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 23780 KB Output is correct
2 Correct 262 ms 51472 KB Output is correct
3 Correct 324 ms 75908 KB Output is correct
4 Correct 244 ms 51484 KB Output is correct
5 Correct 251 ms 51352 KB Output is correct
6 Correct 293 ms 54928 KB Output is correct
7 Correct 207 ms 51480 KB Output is correct
8 Correct 334 ms 76644 KB Output is correct
9 Correct 170 ms 51900 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 23756 KB Output is correct
2 Correct 259 ms 51460 KB Output is correct
3 Correct 326 ms 80036 KB Output is correct
4 Correct 257 ms 51432 KB Output is correct
5 Correct 257 ms 51440 KB Output is correct
6 Correct 256 ms 55396 KB Output is correct
7 Correct 168 ms 51836 KB Output is correct
8 Correct 296 ms 67256 KB Output is correct
9 Correct 145 ms 52016 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 23756 KB Output is correct
2 Incorrect 17 ms 31664 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 13 ms 23780 KB Output is correct
2 Correct 262 ms 51472 KB Output is correct
3 Correct 324 ms 75908 KB Output is correct
4 Correct 244 ms 51484 KB Output is correct
5 Correct 251 ms 51352 KB Output is correct
6 Correct 293 ms 54928 KB Output is correct
7 Correct 207 ms 51480 KB Output is correct
8 Correct 334 ms 76644 KB Output is correct
9 Correct 170 ms 51900 KB Output is correct
10 Correct 13 ms 23756 KB Output is correct
11 Correct 259 ms 51460 KB Output is correct
12 Correct 326 ms 80036 KB Output is correct
13 Correct 257 ms 51432 KB Output is correct
14 Correct 257 ms 51440 KB Output is correct
15 Correct 256 ms 55396 KB Output is correct
16 Correct 168 ms 51836 KB Output is correct
17 Correct 296 ms 67256 KB Output is correct
18 Correct 145 ms 52016 KB Output is correct
19 Correct 15 ms 23764 KB Output is correct
20 Incorrect 253 ms 51480 KB Output isn't correct
21 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 14 ms 23756 KB Output is correct
2 Incorrect 17 ms 31664 KB Output isn't correct
3 Halted 0 ms 0 KB -