54972023-07-01 17:44:50AndrosVillanyautĂłcpp11Wrong answer 8/6072ms6656 KiB
#include<algorithm>
#include <iostream>
#define maxN 301
#define Infi 10000000000


int varosszam, utszam, max_toltes;
long long T[maxN][maxN];
long long akku_graf[maxN][maxN];
long long T2[maxN][maxN];
long long X[maxN][maxN];


using namespace std;

void debug(long long A[maxN][maxN]) {
	for (int i = 1; i <= varosszam; i++)
	{
		for (int j = i + 1; j <= varosszam; j++)
		{
			//if (A[j][i] != A[i][j])cout << "SZIMETRIAVESZTESEG";
			cout << i << ", " << j << "\t" << A[i][j];
			cout << endl;
		}
	}
}

//Bekér két gráfot
//A-t módosítja
//					töltés					T2
void Szor(long long A[maxN][maxN], long long B[maxN][maxN]) {
	//X egy új gráf lesz
	for (int i = 1; i <= varosszam; i++)
		for (int j = 1; j <= varosszam; j++) {
			//Minden párra
			X[i][j] = Infi;

			//Ha i-ből j-be szeretnénk eljutni,
			//úgy, hogy közben tölthetünk egyszer
			for (int u = 1; u <= varosszam; u++)
				X[i][j] = min(X[i][j], max(A[i][u], B[u][j]));
		}

	//Átírja A-t X értékeire
	for (int i = 1; i <= varosszam; i++)
		for (int j = 1; j <= varosszam; j++) {
			A[i][j] = X[i][j];
		}
}

int main() {
	//Cin tie null
	int kezdo, veg;
	long long a = 0, b, hossz;
	cin >> varosszam >> utszam >> max_toltes;

	//Felvesz valami gráfot.
	//Minden éle végtelen, kivéve ha önmagába visz
	//Akkor 0
	//1-től indexel!
	for (int i = 1; i <= varosszam; i++) {
		T[i][i] = 0;
		for (int j = i + 1; j <= varosszam; j++) {
			T[j][i] = Infi;
			T[i][j] = Infi;
		}
	}

	//Az előzőleg felvett gráfnál beállítja az élek hosszát
	for (int i = 0; i < utszam; i++) {
		cin >> kezdo >> veg >> hossz;
		T[kezdo][veg] = hossz;
		T[veg][kezdo] = hossz;
	}

	//cout << "Sima beolvasas";
	//debug(T);
	//cout << endl << endl;


	//Máténak igaza volt valszeg, ez minimális utat keres
	//Minden élre megnézi, hogy lehet-e javítani egy köztes node-al
	for (int koztes_node = 1; koztes_node <= varosszam; koztes_node++)
		for (int i = 1; i <= varosszam; i++)
			for (int j = 1; j <= varosszam; j++)
				//Minden számhármason. Ez nagyon lassúnak tűnik
				T[i][j] = min(T[i][j], T[i][koztes_node] + T[koztes_node][j]);

	//debug(T);

	//T2 másolata T-nek
	for (int i = 1; i <= varosszam; i++) {
		//Önmagába 0
		akku_graf[i][i] = 0;
		T2[i][i] = 0;

		for (int j = i + 1; j <= varosszam; j++) {
			T2[i][j] = T[i][j];
			T2[j][i] = T[i][j];
			//Átmásolja a T-t
			akku_graf[i][j] = Infi;
			akku_graf[j][i] = Infi;
			//E-t meg felveszi végtelen élekkel
		}
	}

	/*while (max_toltes > 0) {

		if (max_toltes % 2 == 1) {
			Szor(akku_graf, T2);
		}


		Szor(T2, T2);

		max_toltes /= 2;
	}*/

	for (int i = 0; i < max_toltes; i++)
	{
		Szor(T2, T2);
	}

	for (int i = 1; i <= varosszam; i++)
		for (int j = 1; j <= varosszam; j++) {
			akku_graf[i][j] = T2[i][j];
		}

	//Maximális szükséges kapacitás kiválasztása
	for (int i = 1; i <= varosszam; i++)
		for (int j = i + 1; j <= varosszam; j++)
			a = max(a, akku_graf[i][j]);

	cout << a << "\n";
	return 0;
}
SubtaskSumTestVerdictTimeMemory
base8/60
1Accepted0/03ms2196 KiB
2Accepted0/030ms3480 KiB
3Wrong answer0/14ms3260 KiB
4Wrong answer0/14ms3488 KiB
5Wrong answer0/14ms3612 KiB
6Wrong answer0/29ms4556 KiB
7Wrong answer0/28ms4816 KiB
8Wrong answer0/29ms5020 KiB
9Wrong answer0/14ms4336 KiB
10Wrong answer0/16ms4460 KiB
11Wrong answer0/16ms4596 KiB
12Wrong answer0/217ms5464 KiB
13Wrong answer0/230ms5468 KiB
14Wrong answer0/227ms5776 KiB
15Wrong answer0/316ms5684 KiB
16Wrong answer0/320ms5680 KiB
17Wrong answer0/24ms4988 KiB
18Wrong answer0/26ms5156 KiB
19Wrong answer0/28ms5168 KiB
20Wrong answer0/26ms5364 KiB
21Accepted2/24ms5260 KiB
22Wrong answer0/24ms5332 KiB
23Wrong answer0/329ms6328 KiB
24Wrong answer0/335ms6328 KiB
25Wrong answer0/372ms6376 KiB
26Wrong answer0/350ms6652 KiB
27Accepted3/339ms6424 KiB
28Wrong answer0/327ms6656 KiB
29Wrong answer0/318ms6592 KiB
30Accepted3/345ms6576 KiB