9494 2024. 02. 22 11:56:20 ananász Útadó cpp17 Időlimit túllépés 4/50 800ms 19396 KiB
// utado.cpp : This file contains the 'main' function. Program execution begins and ends there.
//

#include <iostream>
#include <vector>
#include <queue>
#include <set>
#include <algorithm>

using namespace std;

struct ut {
	long long elotte;
	long long cel;
};
struct varos {
	long long elszam;
	vector <ut>szomszedok;
};
struct eredmeny {
	long long atmegy;
	long long kezd;
	long long veg;
	long long ar;
};
bool rendez(eredmeny e1, eredmeny e2) {
	return e1.atmegy > e2.atmegy;
}
int main()
{
	long long N;
	cin >> N;
	vector<varos>varosok(N + 1);
	ut x, y;
	x.elotte = 0;
	y.elotte = 0;
	set<int>s;
	for (int i = 0; i < N - 1; i++)
	{
		cin >> x.cel >> y.cel;
		varosok[x.cel].szomszedok.push_back(y);
		varosok[y.cel].szomszedok.push_back(x);
		varosok[x.cel].elszam++;
		varosok[y.cel].elszam++;
		if (varosok[y.cel].elszam > 1)
		{
			s.insert(y.cel);
		}
		if (varosok[x.cel].elszam > 1)
		{
			s.insert(x.cel);
		}
	}
	priority_queue<int>sulyok;
	long long suly;
	for (int i = 0; i < N - 1; i++)
	{
		cin >> suly;
		sulyok.push(suly);
	}
	vector<eredmeny>utak(N-1);
	int e = 0;
	while (s.size() > 0)
	{
		int i = 0;
		for (int id:s)
		{
			i = id;
			break;
		}
		for (int j = 0; j < varosok[i].szomszedok.size(); j++)
		{
			int akt = varosok[i].szomszedok[j].cel;
			if (varosok[akt].elszam == 1)
			{
				for (int k = 0; k < varosok[akt].szomszedok.size(); k++)
				{
					if (varosok[akt].szomszedok[k].cel!=i)
					{
						varosok[i].szomszedok[j].elotte += varosok[akt].szomszedok[k].elotte;
					}
				}
				varosok[i].szomszedok[j].elotte++;
				varosok[akt].elszam = 0;
				varosok[i].elszam--;
				if (varosok[i].elszam == 1)
				{
					s.erase(i);
				}
				utak[e].kezd = i;
				utak[e].veg = akt;
				utak[e].atmegy = varosok[i].szomszedok[j].elotte*(N- varosok[i].szomszedok[j].elotte)*2;
				e++;
			}
		}

	}
	sort(utak.begin(), utak.end(), rendez);
	int sum = 0;
	for (int i = 0; i < N-1; i++)
	{
		utak[i].ar = sulyok.top();
		sum += sulyok.top() * utak[i].atmegy;
		sulyok.pop();
	}
	cout << sum << endl;
	for (int i = 0; i < N-1; i++)
	{
		cout << utak[i].kezd <<" "<<utak[i].veg<<" "<<utak[i].ar<<endl;
	}
}

// Run program: Ctrl + F5 or Debug > Start Without Debugging menu
// Debug program: F5 or Debug > Start Debugging menu

// Tips for Getting Started: 
//   1. Use the Solution Explorer window to add/manage files
//   2. Use the Team Explorer window to connect to source control
//   3. Use the Output window to see build output and other messages
//   4. Use the Error List window to view errors
//   5. Go to Project > Add New Item to create new code files, or Project > Add Existing Item to add existing code files to the project
//   6. In the future, to open this project again, go to File > Open > Project and select the .sln file
Részfeladat Összpont Teszt Verdikt Idő Memória
base 4/50
1 Elfogadva 0/0 3ms 1812 KiB
2 Időlimit túllépés 0/0 800ms 4476 KiB
3 Időlimit túllépés 0/2 750ms 2196 KiB
4 Időlimit túllépés 0/2 765ms 2708 KiB
5 Időlimit túllépés 0/2 754ms 2116 KiB
6 Időlimit túllépés 0/2 745ms 2744 KiB
7 Időlimit túllépés 0/2 773ms 2988 KiB
8 Részben helyes 4/8 171ms 19396 KiB
9 Időlimit túllépés 0/2 767ms 2692 KiB
10 Időlimit túllépés 0/2 773ms 2856 KiB
11 Időlimit túllépés 0/2 773ms 3964 KiB
12 Időlimit túllépés 0/2 782ms 3928 KiB
13 Időlimit túllépés 0/2 777ms 3928 KiB
14 Időlimit túllépés 0/2 762ms 10740 KiB
15 Időlimit túllépés 0/2 779ms 10808 KiB
16 Időlimit túllépés 0/2 759ms 11116 KiB
17 Időlimit túllépés 0/2 771ms 11064 KiB
18 Időlimit túllépés 0/2 765ms 11368 KiB
19 Időlimit túllépés 0/2 759ms 11408 KiB
20 Időlimit túllépés 0/2 767ms 11212 KiB
21 Időlimit túllépés 0/2 800ms 11172 KiB
22 Időlimit túllépés 0/2 744ms 11252 KiB
23 Időlimit túllépés 0/2 759ms 11336 KiB
24 Időlimit túllépés 0/2 771ms 11584 KiB