Submission #55749811


Source Code Expand

Copy
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <inttypes.h>
#define MAX_N 212345
struct edge_s {
int to, cost;
};
int ec[MAX_N * 2];
struct edge_s* es[MAX_N * 2];
void ae(int from, int to, int cost) {
es[from] = realloc(es[from], sizeof(*es[from]) * (ec[from] + 1));
if (es[from] == NULL) exit(2);
es[from][ec[from]].to = to;
es[from][ec[from]].cost = cost;
ec[from]++;
}
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <inttypes.h>

#define MAX_N 212345

struct edge_s {
	int to, cost;
};

int ec[MAX_N * 2];
struct edge_s* es[MAX_N * 2];

void ae(int from, int to, int cost) {
	es[from] = realloc(es[from], sizeof(*es[from]) * (ec[from] + 1));
	if (es[from] == NULL) exit(2);
	es[from][ec[from]].to = to;
	es[from][ec[from]].cost = cost;
	ec[from]++;
}

int Q_cap = 0, Q_size = 0;
struct q_s {
	int node;
	int64_t cost;
} *Q;

void qadjust(int pos) {
	for (;;) {
		int minpos = pos;
		int i;
		for (i = 1; i <= 2; i++) {
			int c = pos * 2 + i;
			if (c < Q_size && Q[minpos].cost > Q[c].cost) minpos = c;
		}
		if (minpos == pos) {
			if (pos == 0) return;
			pos = (pos - 1) / 2;
		} else {
			struct q_s temp = Q[minpos];
			Q[minpos] = Q[pos];
			Q[pos] = temp;
			pos = minpos;
		}
	}
}

void qadd(int node, int64_t cost) {
	if (Q_size >= Q_cap) {
		Q_cap = Q_size + 1;
		Q = realloc(Q, sizeof(*Q) * Q_cap);
		if (Q == NULL) exit(2);
	}
	Q[Q_size].node = node;
	Q[Q_size].cost = cost;
	Q_size++;
	qadjust(Q_size - 1);
}

struct q_s qget(void) {
	struct q_s ret;
	if (Q_size <= 0) exit(99);
	ret = Q[0];
	Q_size--;
	if (Q_size > 0) {
		Q[0] = Q[Q_size];
		qadjust(0);
	}
	return ret;
}

int64_t mincost[MAX_N * 2];

int main(void) {
	int N, M;
	int i;
	if (scanf("%d%d", &N, &M) != 2) return 1;
	Q_cap = N * 2 + M * 2;
	Q = malloc(sizeof(*Q) * Q_cap);
	if (Q == NULL) return 2;
	for (i = 1; i <= N; i++) {
		int A;
		if (scanf("%d", &A) != 1) return 1;
		ae(i, i + MAX_N, A);
	}
	for (i = 0; i < M; i++) {
		int U, V, B;
		if (scanf("%d%d%dd", &U, &V, &B) != 3) return 1;
		ae(U + MAX_N, V, B);
		ae(V + MAX_N, U, B);
	}
	memset(mincost, -1 ,sizeof(mincost));
	mincost[1] = 0;
	qadd(1, 0);
	while (Q_size > 0) {
		struct q_s cur = qget();
		if (cur.cost == mincost[cur.node]) {
			for (i = 0; i < ec[cur.node]; i++) {
				int next_node = es[cur.node][i].to;
				int64_t next_cost = cur.cost + es[cur.node][i].cost;
				if (mincost[next_node] < 0 || mincost[next_node] > next_cost) {
					mincost[next_node] = next_cost;
					qadd(next_node, next_cost);
				}
			}
		}
	}
	printf("%" PRId64, mincost[2 + MAX_N]);
	for (i = 3; i <= N; i++) {
		printf(" %" PRId64, mincost[i + MAX_N]);
	}
	putchar('\n');
	return 0;
}

/*

各頂点を、入口と出口に分ける
入口→出口に、その頂点の重みをコストとする辺を張る

*/

Submission Info

Submission Time
Task D - Shortest Path 3
User mikecat
Language C (gcc 12.2.0)
Score 425
Code Size 2519 Byte
Status AC
Exec Time 350 ms
Memory 27816 KB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 425 / 425
Status
AC × 3
AC × 41
Set Name Test Cases
Sample 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt
All 00_sample_01.txt, 00_sample_02.txt, 00_sample_03.txt, 01_random-small_01.txt, 01_random-small_02.txt, 01_random-small_03.txt, 01_random-small_04.txt, 01_random-small_05.txt, 01_random-small_06.txt, 01_random-small_07.txt, 01_random-small_08.txt, 01_random-small_09.txt, 01_random-small_10.txt, 01_random-small_11.txt, 01_random-small_12.txt, 01_random-small_13.txt, 01_random-small_14.txt, 01_random-small_15.txt, 02_random-large_01.txt, 02_random-large_02.txt, 02_random-large_03.txt, 02_random-large_04.txt, 02_random-large_05.txt, 02_random-large_06.txt, 02_random-large_07.txt, 02_random-large_08.txt, 02_random-large_09.txt, 02_random-large_10.txt, 02_random-large_11.txt, 02_random-large_12.txt, 02_random-large_13.txt, 02_random-large_14.txt, 02_random-large_15.txt, 03_handmade_01.txt, 03_handmade_02.txt, 03_handmade_03.txt, 03_handmade_04.txt, 03_handmade_05.txt, 03_handmade_06.txt, 03_handmade_07.txt, 03_handmade_08.txt
Case Name Status Exec Time Memory
00_sample_01.txt AC 2 ms 4836 KB
00_sample_02.txt AC 2 ms 4920 KB
00_sample_03.txt AC 2 ms 4928 KB
01_random-small_01.txt AC 3 ms 5020 KB
01_random-small_02.txt AC 3 ms 4964 KB
01_random-small_03.txt AC 3 ms 5072 KB
01_random-small_04.txt AC 3 ms 5104 KB
01_random-small_05.txt AC 62 ms 8932 KB
01_random-small_06.txt AC 14 ms 5872 KB
01_random-small_07.txt AC 9 ms 5676 KB
01_random-small_08.txt AC 44 ms 7808 KB
01_random-small_09.txt AC 2 ms 5000 KB
01_random-small_10.txt AC 20 ms 6468 KB
01_random-small_11.txt AC 6 ms 5256 KB
01_random-small_12.txt AC 13 ms 5804 KB
01_random-small_13.txt AC 64 ms 8852 KB
01_random-small_14.txt AC 3 ms 5104 KB
01_random-small_15.txt AC 18 ms 6348 KB
02_random-large_01.txt AC 167 ms 14896 KB
02_random-large_02.txt AC 325 ms 24052 KB
02_random-large_03.txt AC 10 ms 5692 KB
02_random-large_04.txt AC 324 ms 24084 KB
02_random-large_05.txt AC 135 ms 13168 KB
02_random-large_06.txt AC 316 ms 24028 KB
02_random-large_07.txt AC 228 ms 17916 KB
02_random-large_08.txt AC 323 ms 24060 KB
02_random-large_09.txt AC 99 ms 11232 KB
02_random-large_10.txt AC 325 ms 24092 KB
02_random-large_11.txt AC 308 ms 23088 KB
02_random-large_12.txt AC 322 ms 24072 KB
02_random-large_13.txt AC 280 ms 21120 KB
02_random-large_14.txt AC 332 ms 24040 KB
02_random-large_15.txt AC 88 ms 10136 KB
03_handmade_01.txt AC 225 ms 23972 KB
03_handmade_02.txt AC 201 ms 23852 KB
03_handmade_03.txt AC 350 ms 27816 KB
03_handmade_04.txt AC 73 ms 10188 KB
03_handmade_05.txt AC 213 ms 16788 KB
03_handmade_06.txt AC 204 ms 16320 KB
03_handmade_07.txt AC 2 ms 4948 KB
03_handmade_08.txt AC 2 ms 4936 KB


2024-07-20 (Sat)
13:02:17 +09:00