제출 #953408

#제출 시각아이디문제언어결과실행 시간메모리
953408Juanchoki경주 (Race) (IOI11_race)C++14
컴파일 에러
0 ms0 KiB
#include <bits/stdc++.h>
#include "race.h"
#define ll long long
#define deb(x) cout << #x << ':' << ' ' << x << endl;
using namespace std;
struct tpos
{
	ll v, w;
};
ll freq[1<<20], subarbol[1<<20], padre[1<<20];
bool visi[1<<20];
ll resp = 1LL<<62;
ll N, k;
vector<tpos> adj[1<<20];
 
ll centroide (ll yo, ll pa, ll n)
{
	for (tpos v: adj[yo])
	{
		if (v.v == pa) continue;
		if (subarbol[v.v] >= n/2) return centroide(v.v, yo, n);
	}
	return yo;
}
 
ll dfs(ll yo, ll pa)
{
	subarbol[yo] = 1;
	padre[yo] = pa;
	for (tpos v: adj[yo])
	{
		if (v.v == pa) continue;
		subarbol[yo] += dfs(v.v, yo);
	}
	return subarbol[yo];
}
ll MM;
void dfs2 (ll yo, ll pa, ll peso, ll camino)
{
	if (peso > k) return;
	if (peso == k) resp = min(resp, camino);
	
	//cout << MM << ':' << ' ' << yo << ' ' << peso << endl;
	if (freq[k-peso] != 0) resp = min(resp, camino+freq[k-peso]);
	
	if (freq[peso] == 0) freq[peso] = camino;
	
	freq[peso] = min(camino, freq[peso]);
 
	for (tpos v: adj[yo])
	{
		if (v.v == pa) continue;
		if (visi[v.v]) continue;
		dfs2(v.v, yo, peso + v.w, camino+1);
	}
}
 
void dfs3(ll yo, ll pa, ll peso)
{
	if (peso > k) return;
	freq[peso] = 0;
	for (tpos v: adj[yo])
	{
		if (v.v == pa) continue;
		dfs3(v.v, yo, peso + v.w);
	}
}
 
int iter = 0;
 
void responde (ll pa, ll mero_mero)
{
	dfs2(mero_mero, -1, 0, 0);
	MM = mero_mero;
	//deb(mero_mero);
	visi[mero_mero] = 1;
 	dfs3(mero_mero, -1, 0);
	for (tpos v: adj[mero_mero])
	{
		if (v.v == pa) continue;
		if (visi[v.v]) continue;
		
		dfs(v.v, mero_mero);
		ll mm = centroide(v.v, mero_mero, subarbol[v.v]);
		responde(-1, mm);
	}
}
 
int best_path(int N, int K, int H[][2], int L[])
{ 
	k = K;
	//cout << N << ' ' << K << endl;
	for (ll i = 0; i < N-1; i++)
	{
		adj[H[i][1]].push_back({H[i][0], L[i]});
		adj[H[i][0]].push_back({H[i][1], L[i]});
	}
	dfs(0, -1);
	ll mm = centroide(0, -1, subarbol[0]);
	MM = mm;
 	responde(padre[mm], mm);
 
	if (resp == 1LL<<62) resp = -1;
 
  	return resp;
}
 

int main ()
{
	int nn, kk;
	cin >> nn >> kk;
	int h[nn-1][2], l[nn-1];

	for (int i = 0; i < nn-1; i++)
		cin >> h[i][0] >> h[i][1];

	for (int i = 0; i < nn-1; i++)
		cin >> l[i];

	cout << best_path(nn, kk, h, l);
}

컴파일 시 표준 에러 (stderr) 메시지

/usr/bin/ld: /tmp/ccbt7HDm.o: in function `main':
race.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccAHM7hp.o:grader.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status