답안 #574523

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
574523 2022-06-08T17:52:25 Z errorgorn Designated Cities (JOI19_designated_cities) C++17
16 / 100
448 ms 92052 KB
// Super Idol的笑容
//    都没你的甜
//  八月正午的阳光
//    都没你耀眼
//  热爱105°C的你
// 滴滴清纯的蒸馏水

#include <bits/stdc++.h>
using namespace std;

#define int long long
#define ll long long
#define ii pair<ll,ll>
#define iii pair<ii,ll>
#define fi first
#define se second
#define endl '\n'
#define debug(x) cout << #x << ": " << x << endl

#define pub push_back
#define pob pop_back
#define puf push_front
#define pof pop_front
#define lb lower_bound
#define ub upper_bound

#define rep(x,start,end) for(int x=(start)-((start)>(end));x!=(end)-((start)>(end));((start)<(end)?x++:x--))
#define all(x) (x).begin(),(x).end()
#define sz(x) (int)(x).size()

mt19937 rng(chrono::system_clock::now().time_since_epoch().count());

int n,q;
vector<ii> al[200005];
int w[400005];

int ans[200005];

ii memo[400005];

ii pp[200005];
vector<ii> childs[200005];
int val[200005];
vector<int> f[200005];
vector<int> b[200005];

ii dfs(int i,int p,int id){
	if (memo[id]!=ii(-1,-1)) return memo[id];
	
	if (pp[i].fi==-1){
		for (auto [it,id]:al[i]){
			if (it==p){
				pp[i]={it,id};
				continue;
			}
			childs[i].pub({it,id});
		}
		
		sort(all(childs[i]));
		f[i].pub(0);
		
		for (auto [it,id]:childs[i]){
			auto temp=dfs(it,i,id);
			val[i]+=temp.fi;
			f[i].pub(temp.se);
		}
		
		b[i].pub(0);
		rep(x,sz(f[i]),1) b[i].pub(f[i][x]);
		reverse(all(b[i]));
		
		rep(x,1,sz(f[i])) f[i][x]=max(f[i][x],f[i][x-1]);
		rep(x,sz(b[i])-1,0) b[i][x]=max(b[i][x],b[i][x+1]);
		
		return memo[id]={val[i]+w[id^1],f[i].back()+w[id]};
	}
	else{
		auto temp1=dfs(pp[i].fi,i,pp[i].se);
		auto temp2=dfs(p,i,id^1);
		int idx=lb(all(childs[i]),ii(p,-1))-childs[i].begin();
		
		return memo[id]={
			val[i]-temp2.fi+temp1.fi+w[id^1],
			max({f[i][idx],b[i][idx+1],temp1.se})+w[id],
		};
	}
}

signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin.exceptions(ios::badbit | ios::failbit);
	
	cin>>n;
	
	int a,b;
	rep(x,0,n-1){
		cin>>a>>b;
		al[a].pub({b,x<<1});
		al[b].pub({a,x<<1|1});
		cin>>w[x<<1]>>w[x<<1|1];
	}
	
	memset(memo,-1,sizeof(memo));
	memset(pp,-1,sizeof(pp));
	
	rep(x,1,n+1){
		int tot=0;
		for (auto [it,id]:al[x]) tot+=dfs(it,x,id).fi;
		ans[1]=max(ans[1],tot);
	}
	
	int best=-1;
	rep(x,1,n+1) if (sz(al[x])==1){
		auto temp=dfs(al[x][0].fi,x,al[x][0].se);
		if (ans[2]<temp.fi+temp.se){
			ans[2]=temp.fi+temp.se;
			best=x;
		}
	}
	
	int tot=0;
	rep(x,0,2*(n-1)) tot+=w[x];
	
	cin>>q;
	while (q--){
		cin>>a;
		cout<<tot-ans[a]<<endl;
	}
}

Compilation message

designated_cities.cpp: In function 'int main()':
designated_cities.cpp:105:29: warning: 'void* memset(void*, int, size_t)' writing to an object of type 'struct std::pair<long long int, long long int>' with no trivial copy-assignment [-Wclass-memaccess]
  105 |  memset(memo,-1,sizeof(memo));
      |                             ^
In file included from /usr/include/c++/10/bits/stl_algobase.h:64,
                 from /usr/include/c++/10/bits/specfun.h:45,
                 from /usr/include/c++/10/cmath:1927,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from designated_cities.cpp:8:
/usr/include/c++/10/bits/stl_pair.h:211:12: note: 'struct std::pair<long long int, long long int>' declared here
  211 |     struct pair
      |            ^~~~
designated_cities.cpp:106:25: warning: 'void* memset(void*, int, size_t)' writing to an object of type 'struct std::pair<long long int, long long int>' with no trivial copy-assignment [-Wclass-memaccess]
  106 |  memset(pp,-1,sizeof(pp));
      |                         ^
In file included from /usr/include/c++/10/bits/stl_algobase.h:64,
                 from /usr/include/c++/10/bits/specfun.h:45,
                 from /usr/include/c++/10/cmath:1927,
                 from /usr/include/x86_64-linux-gnu/c++/10/bits/stdc++.h:41,
                 from designated_cities.cpp:8:
/usr/include/c++/10/bits/stl_pair.h:211:12: note: 'struct std::pair<long long int, long long int>' declared here
  211 |     struct pair
      |            ^~~~
designated_cities.cpp:114:6: warning: variable 'best' set but not used [-Wunused-but-set-variable]
  114 |  int best=-1;
      |      ^~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 28468 KB Output is correct
2 Incorrect 17 ms 28500 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 28520 KB Output is correct
2 Correct 416 ms 63640 KB Output is correct
3 Correct 401 ms 82580 KB Output is correct
4 Correct 392 ms 63576 KB Output is correct
5 Correct 388 ms 63616 KB Output is correct
6 Correct 425 ms 66340 KB Output is correct
7 Correct 334 ms 63280 KB Output is correct
8 Correct 432 ms 83344 KB Output is correct
9 Correct 248 ms 62324 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 28448 KB Output is correct
2 Correct 434 ms 69704 KB Output is correct
3 Correct 400 ms 92052 KB Output is correct
4 Correct 424 ms 68212 KB Output is correct
5 Correct 413 ms 69696 KB Output is correct
6 Correct 425 ms 72928 KB Output is correct
7 Correct 279 ms 69804 KB Output is correct
8 Correct 448 ms 81932 KB Output is correct
9 Correct 251 ms 67912 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 28468 KB Output is correct
2 Incorrect 17 ms 28500 KB Output isn't correct
3 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 28520 KB Output is correct
2 Correct 416 ms 63640 KB Output is correct
3 Correct 401 ms 82580 KB Output is correct
4 Correct 392 ms 63576 KB Output is correct
5 Correct 388 ms 63616 KB Output is correct
6 Correct 425 ms 66340 KB Output is correct
7 Correct 334 ms 63280 KB Output is correct
8 Correct 432 ms 83344 KB Output is correct
9 Correct 248 ms 62324 KB Output is correct
10 Correct 15 ms 28448 KB Output is correct
11 Correct 434 ms 69704 KB Output is correct
12 Correct 400 ms 92052 KB Output is correct
13 Correct 424 ms 68212 KB Output is correct
14 Correct 413 ms 69696 KB Output is correct
15 Correct 425 ms 72928 KB Output is correct
16 Correct 279 ms 69804 KB Output is correct
17 Correct 448 ms 81932 KB Output is correct
18 Correct 251 ms 67912 KB Output is correct
19 Correct 15 ms 28452 KB Output is correct
20 Incorrect 436 ms 69772 KB Output isn't correct
21 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 15 ms 28468 KB Output is correct
2 Incorrect 17 ms 28500 KB Output isn't correct
3 Halted 0 ms 0 KB -