제출 #499115

#제출 시각아이디문제언어결과실행 시간메모리
499115KiprasCheap flights (LMIO18_pigus_skrydziai)C++14
53 / 100
2504 ms75488 KiB
#include <bits/stdc++.h>
#define debug cout << "alio\n"
#define pb push_back
#define ll long long
#define MAX (int)3e5
using namespace std;

vector<int> adj[MAX];
map<pair<int, int>, int> pe;

int main()
{
	int N, M;
	cin >> N >> M;
	for(int i = 0; i < M; i++)
	{
		int a, b;
		ll p;
		cin >> a >> b >> p;
		adj[a-1].pb(b-1);
		adj[b-1].pb(a-1);
		pe[{a-1, b-1}] = p;
		pe[{b-1, a-1}] = p;
	}
	ll mx = -1;
	for(int i = 0; i < N; i++)
	{
		if(adj[i].empty())
			continue;
		ll sum_tr = 0;
		ll sum_zv = 0;
		// perrenkam zvaigzdes
		for(int sidx : adj[i])
		{
			sum_zv += pe[{i, sidx}];
		}
		// perrenkam trikampius
		//cout << i << "-tojo miesto kaimynai:\n";
		for(int j = 0; j < (int)(adj[i].size())-1; j++) // gali pasirodyt, kad kils gresme jeigu yra tik du miestai, kuriuos jungia 1 briauna, bet td jie po zvaigzdute palenda ir juos vstk isrenka, net nereikia sito ciklo
		{
			int kaim1 = adj[i][j];
			int kaim2 = adj[i][j+1];
			/*
			cout << kaim1 << ' ' << miestai[i].pelnas[kaim1] << '\n';
			cout << kaim2 << ' ' << miestai[i].pelnas[kaim2] << '\n';
			cout << "Tarpusavy " << miestai[kaim1].pelnas[kaim2] << '\n';
			*/
			if(pe.find({kaim1, kaim2}) != pe.end()) // jeigu i-tojo miesto kaimynai j ir j+1 irgi turi kelia, tai susidaro trikampis
				sum_tr = pe[{kaim1, kaim2}] + pe[{i, kaim1}] + pe[{i, kaim2}];
			//cout << '\n';
		}
		if(sum_zv > mx) mx = sum_zv;
		if(sum_tr > mx) mx = sum_tr;
	}
	cout << mx << '\n';
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...