Submission #471370

#TimeUsernameProblemLanguageResultExecution timeMemory
471370PiejanVDCDreaming (IOI13_dreaming)C++17
Compilation error
0 ms0 KiB
#include "dreaming.h"
#include <bits/stdc++.h>
using namespace std;

vector<vector<pair<long long,long long>>>adj;
bool vis[100000];
map<long long,long long>mp,cnt;
vector<long long>connect;

long long dd(long long node, long long e) {
	vis[node]=true;
	long long mx = 0, prev = -1;
	for(auto z : adj[node]) {
		if(z.first == e) continue;
		auto ret = dd(z.first,node);
		if(mx < ret+z.second)
			mx=ret+z.second,prev=z.first;
	}
	mp[node]=prev,cnt[node]=mx;
	return mx;
}

pair<long long,long long> d(long long node, long long e) {
	vis[node]=true;
	pair<long long,long long>mx = {0,node};
	for(auto z : adj[node]) {
		if(z.first == e) continue;
		auto ret = d(z.first,node);
		if(mx.first < ret.first+z.second)
			mx.first=ret.first+z.second,mx.second=ret.second;
	}
	return mx;
}

void dia(long long node) {
	long long nd = d(node,-1).second;
	auto ans = dd(nd,-1);
	long long curr = nd;
	while(cnt[mp[curr]] > ans/2) curr=mp[curr];
	if(cnt[curr] <= ans - cnt[mp[curr]]) {
		connect.push_back(curr);
	} else connect.push_back(mp[curr]);
	return;
}

long long travelTime(long long n, long long m, long long l, long long a[], long long b[], long long t[]) {
	adj.resize(n);
	for(long long i = 0 ; i < m ; i++) {
		adj[a[i]].push_back(make_pair(b[i],t[i]));
		adj[b[i]].push_back(make_pair(a[i],t[i]));
	}
	for(long long i = 0 ; i < n ; i++) {
		if(vis[i]) continue;
		dia(i);
	}
	for(long long i = 0 ; i < connect.size()-1 ; i++) {
		adj[connect[i]].push_back(make_pair(connect[i+1],l));
		adj[connect[i+1]].push_back(make_pair(connect[i],l));
	}
	long long edge = d(0,-1).second;
	return d(edge,-1).first;
}

Compilation message (stderr)

dreaming.cpp: In function 'long long int travelTime(long long int, long long int, long long int, long long int*, long long int*, long long int*)':
dreaming.cpp:56:26: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |  for(long long i = 0 ; i < connect.size()-1 ; i++) {
      |                        ~~^~~~~~~~~~~~~~~~~~
/usr/bin/ld: /tmp/ccpRnzMo.o: in function `main':
grader.c:(.text.startup+0xd1): undefined reference to `travelTime'
collect2: error: ld returned 1 exit status