답안 #1009616

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
1009616 2024-06-27T17:10:22 Z Ivo_12 시간이 돈 (balkan11_timeismoney) C++
0 / 100
2000 ms 65536 KB
#include <bits/stdc++.h>
#define ll long long
#define pb push_back
#define mp make_pair
#define F first
#define S second
#define pii pair < ll, ll >
#define FIO ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0);

using namespace std;

struct Edge {
	ll a, b, t, m;
};

const ll N = 1e3+10, M = 1e5+10;
ll n, m;
Edge edges[M];
ll x, y;

ll par[N];

int fn( int i ) {
	if(par[i] == i) return i;
	return par[i] = fn(par[i]);
}

void un( int a, int b ) {
	a = fn(a); b = fn(b);
	if(a != b) par[b] = a;
	return;
}

void res( void ) {
	for(ll i = 0; i < n; i++) {
		par[i] = i;
	}
}

bool check_un( int a, int b ) {
	return (fn(a) == fn(b));
}

pii mst() {
	ll tout = 0;
	ll mout = 0;
	res();
	for(ll i = 0; i < m; i++) {
		if(!check_un(edges[i].a, edges[i].b)) {
			un(edges[i].a, edges[i].b);
			tout += edges[i].t;
			mout += edges[i].m;
		}
	}
	return mp(tout, mout);
}

bool s_func_t( Edge a, Edge b ) {
	if(b.t > a.t) return 1;
	if(b.t < a.t) return 0;
	if(b.m > a.m) return 1;
	return 0;
}

bool s_func_m( Edge a, Edge b ) {
	if(b.m > a.m) return 1;
	if(b.m < a.m) return 0;
	if(b.t > a.t) return 1;
	return 0;
}

bool s_func_xy( Edge a, Edge b ) {
	return ((b.t * x) + (b.m * y) > (a.t * x) + (a.m * y)) ? 1 : 0;
}

pii daq( pii a, pii b ) {
	y = b.F - a.F;
	x = a.S - b.S;
	sort(edges, edges + m, s_func_xy);
	pii temp1;
	pii temp2;
	pii out = mst();
	if(out == a || out == b) {
		if(a.F * a.S < b.F * b.S) return a;
		else return b;
	}
	temp1 = daq(a, out);
	temp2 = daq(out, b);
	if(temp1.F * temp1.S < out.F * out.S) out = temp1;
	if(temp2.F * temp2.S < out.F * out.S) out = temp2;
	
	return out;
}

int main( void ) {
	
	FIO
	cin >> n >> m;
	for(int i = 0; i < m; i++) {
		cin >> edges[i].a >> edges[i].b >> edges[i].t >> edges[i].m;
	}
	sort(edges, edges + m, s_func_t);
	pii temp1 = mst();
	sort(edges, edges + m, s_func_m);
	pii temp2 = mst();
	pii sol = daq(temp1, temp2);
	cout << sol.F << " " << sol.S << "\n";
	
	return 0;
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 0 ms 344 KB Unexpected end of file - int32 expected
2 Incorrect 0 ms 348 KB Unexpected end of file - int32 expected
3 Incorrect 0 ms 348 KB Unexpected end of file - int32 expected
4 Runtime error 1982 ms 65536 KB Execution killed with signal 9
5 Execution timed out 2052 ms 9648 KB Time limit exceeded
6 Execution timed out 2005 ms 11088 KB Time limit exceeded
7 Execution timed out 2066 ms 2108 KB Time limit exceeded
8 Execution timed out 2070 ms 2900 KB Time limit exceeded
9 Incorrect 1 ms 344 KB Unexpected end of file - int32 expected
10 Incorrect 0 ms 344 KB Unexpected end of file - int32 expected
11 Incorrect 0 ms 348 KB Unexpected end of file - int32 expected
12 Incorrect 0 ms 348 KB Unexpected end of file - int32 expected
13 Incorrect 0 ms 348 KB Unexpected end of file - int32 expected
14 Incorrect 5 ms 432 KB Unexpected end of file - int32 expected
15 Incorrect 3 ms 480 KB Unexpected end of file - int32 expected
16 Execution timed out 2097 ms 1220 KB Time limit exceeded
17 Execution timed out 2062 ms 1108 KB Time limit exceeded
18 Execution timed out 2021 ms 1616 KB Time limit exceeded
19 Execution timed out 2061 ms 2668 KB Time limit exceeded
20 Execution timed out 2075 ms 2900 KB Time limit exceeded