Submission #553804

#TimeUsernameProblemLanguageResultExecution timeMemory
553804QwertyPiFactories (JOI14_factories)C++14
Compilation error
0 ms0 KiB
#include <bits/stdc++.h>
#define int long long
#define fi first
#define se second
#define pb push_back
#define mp make_pair
using namespace std;
typedef pair<int, int> pii;
const int N = 5e5 + 13;
const int inf = 1LL << 60;
int tail[N], d[N], p[N], dep[N];
vector<pii> G[N];
void dfs(int v, int par = -1){
	int out = 0, son = -1;
	for(auto i : G[v]){
		if(i.fi != par){
			d[i.fi] = d[v] + i.se;
			p[i.fi] = v;
			dfs(i.fi, v);
			out++; son = i.fi;
		}
	}
	tail[v] = v, p[tail[v]] = p[v]; if(v != 0) dep[tail[v]] = dep[p[v]] + 1;
	// tail[v] = (out == 1 ? tail[son] : v), p[tail[v]] = p[v], dep[tail[v]] = dep[];
}

void dfs2(int v, int par = -1){
	for(auto i : G[v]){
		if(i.fi != par){
			if(v == tail[v]) dep[tail[i.fi]] = dep[v] + 1;
			dfs2(i.fi, v);
		}
	}
}

struct state{
	int v, dis, colour;
	bool operator< (const state& o) const{
		return v < o.v;
	}
};

vector<state> qry[N];

int32_t main(){
	// ios_base::sync_with_stdio(false);
	int n, m;
	cin >> n >> m;
	for(int i = 0; i < n - 1; i++){
		int u, v, w;
		cin >> u >> v >> w;
		G[u].pb({v, w});
		G[v].pb({u, w});
	}
	dfs(0);
	dfs2(0);
	for(int i = 0; i < m; i++){
		int s, t;
		cin >> s >> t;
		for(int j = n - 1; j >= 0; j--) qry[j].clear();
		for(int j = 0; j < s; j++){
			int v; cin >> v;
			qry[dep[tail[v]]].pb({tail[v], d[v] - d[tail[v]], 0});
		}
		for(int j = 0; j < t; j++){
			int v; cin >> v;
			qry[dep[tail[v]]].pb({tail[v], d[v] - d[tail[v]], 1});
		}
		int ans = inf;
		for(int j = n - 1; j >= 0; j--){
			vector<state> tmp;
			sort(qry[j].begin(), qry[j].end());
			for(auto k : qry[j]){
				bool used = false;
				if(tmp.size() >= 1 && tmp.back().v == k.v && tmp.back().colour + k.colour == 1) ans = min(ans, tmp.back().dis + k.dis);
				if(tmp.size() >= 2 && tmp[tmp.size() - 2].v == k.v && tmp[tmp.size() - 2].colour + k.colour == 1) ans = min(ans, tmp[tmp.size() - 2].dis + k.dis);
				if(tmp.size() >= 1 && tmp[tmp.size() - 1].v == k.v && tmp[tmp.size() - 1].colour == k.colour){
					tmp[tmp.size() - 1].dis = min(tmp[tmp.size() - 1].dis, k.dis); used = true;
				}
				if(tmp.size() >= 2 && tmp[tmp.size() - 2].v == k.v && tmp[tmp.size() - 2].colour == k.colour){
					tmp[tmp.size() - 2].dis = min(tmp[tmp.size() - 2].dis, k.dis); used = true;
				}
				if(!used){
					tmp.pb(k);
				}
			}
			if(j > 0){
				for(auto k : tmp){
					qry[j - 1].pb({p[k.v], k.dis + d[k.v] - d[p[k.v]], k.colour});
				}
			}
		}
		cout << ans << endl;
	}
}

Compilation message (stderr)

factories.cpp: In function 'void dfs(long long int, long long int)':
factories.cpp:14:15: warning: variable 'son' set but not used [-Wunused-but-set-variable]
   14 |  int out = 0, son = -1;
      |               ^~~
/usr/bin/ld: /tmp/cc9AnEbJ.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccLupL4G.o:factories.cpp:(.text.startup+0x0): first defined here
/usr/bin/ld: /tmp/cc9AnEbJ.o: in function `main':
grader.cpp:(.text.startup+0x37d): undefined reference to `Init(int, int*, int*, int*)'
/usr/bin/ld: grader.cpp:(.text.startup+0x412): undefined reference to `Query(int, int*, int, int*)'
collect2: error: ld returned 1 exit status