제출 #964773

#제출 시각아이디문제언어결과실행 시간메모리
964773raspy꿈 (IOI13_dreaming)C++14
100 / 100
100 ms24900 KiB
#include "dreaming.h"

#include <iostream>
#include <vector>
#include <queue>
#include <cstring>

#define inf 1000000000

using namespace std;
typedef long long ll;

vector<pair<ll, ll>> graf[200005];
ll ob[200005];
ll mx[200005];
ll mx1[200005];
ll ixm[200005];
ll rez = 0;

ll dfs(ll u, ll p = -1)
{
	ob[u] = 1;
	ll ix = 0;
	for (auto [v, w] : graf[u])
	{
		if (v != p)
		{
			ll tr = dfs(v, u)+w;
			if (tr > mx[u])
			{
				mx1[u] = max(mx1[u], mx[u]);
				mx[u] = tr;
				ixm[u] = ix;
			}
			else
				mx1[u] = max(mx1[u], tr);
		}
		ix++;
	}
	return mx[u];
}

ll getBest(ll u, ll trd, ll p = -1)
{
	ll tr = max(trd, mx[u]);
	rez = max(rez, mx[u]+max(trd, mx1[u]));
	for (int i = 0; i < graf[u].size(); i++)
	{
		if (graf[u][i].first == p)
			continue;
		if (i == ixm[u])
		{
			tr = min(tr, getBest(graf[u][i].first, max(trd, mx1[u])+graf[u][i].second, u));
			continue;
		}
		tr = min(tr, getBest(graf[u][i].first, max(trd, mx[u])+graf[u][i].second, u));
	}
	return tr;
}

int travelTime(int n, int m, int l, int a[], int b[], int t[])
{
	memset(ixm, -1, sizeof(ixm));
	for (ll i = 0; i < m; i++)
	{
		graf[a[i]].push_back({b[i], t[i]});
		graf[b[i]].push_back({a[i], t[i]});
	}
	priority_queue<ll> pq;
	for (ll i = 0; i < n; i++)
		if (!ob[i])
		{
			dfs(i);
			ll tr = getBest(i, 0);
			pq.push(tr);
		}
	ll tr = pq.top();
	pq.pop();
	if (pq.size())
		tr += pq.top()+l;
	rez = max(rez, tr);
	if (pq.size() > 1)
	{
		tr = pq.top();
		pq.pop();
		tr += pq.top();
		tr += 2*l;
		rez = max(rez, tr);
	}
	return rez;
}

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

dreaming.cpp: In function 'll dfs(ll, ll)':
dreaming.cpp:24:12: warning: structured bindings only available with '-std=c++17' or '-std=gnu++17'
   24 |  for (auto [v, w] : graf[u])
      |            ^
dreaming.cpp: In function 'll getBest(ll, ll, ll)':
dreaming.cpp:47:20: warning: comparison of integer expressions of different signedness: 'int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   47 |  for (int i = 0; i < graf[u].size(); i++)
      |                  ~~^~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...