提出 #22378051
ソースコード 拡げる
#include <stdio.h>
#define INF 1000000001
typedef struct list {
int op;
int cost;
struct list *next;
} list;
list pool[200000] = {};
int used = 0;
void down_heap (int i, int num_elem, int *pri_queue, int *val, int* map) {
int ch[2] = { INF, INF };
if (num_elem <= 2*i+1) {
return;
}
ch[0] = val[pri_queue[2*i+1]];
if (num_elem > 2*i+2) {
ch[1] = val[pri_queue[2*i+2]];
}
if (ch[0] < ch[1] && ch[0] < val[pri_queue[i]]) {
int tmp = pri_queue[i];
pri_queue[i] = pri_queue[2*i+1];
pri_queue[2*i+1] = tmp;
map[pri_queue[i]] = i;
map[pri_queue[2*i+1]] = 2*i+1;
down_heap (2*i+1, num_elem, pri_queue, val, map);
} else if (ch[1] < ch[0] && ch[1] < val[pri_queue[i]]) {
int tmp = pri_queue[i];
pri_queue[i] = pri_queue[2*i+2];
pri_queue[2*i+2] = tmp;
map[pri_queue[i]] = i;
map[pri_queue[2*i+2]] = 2*i+2;
down_heap (2*i+2, num_elem, pri_queue, val, map);
}
return;
}
void up_heap (int i, int *pri_queue, int *val, int *map) {
int parent = (i - 1) / 2;
if (i == 0) {
return;
}
if (val[pri_queue[i]] < val[pri_queue[parent]]) {
int tmp = pri_queue[i];
pri_queue[i] = pri_queue[parent];
pri_queue[parent] = tmp;
map[pri_queue[i]] = i;
map[pri_queue[parent]] = parent;
up_heap (parent, pri_queue, val, map);
}
return;
}
int dequeue(int *num_elem, int *pri_queue, int *val, int* map) {
int ans = pri_queue[0];
*num_elem -= 1;
pri_queue[0] = pri_queue[*num_elem];
map[pri_queue[0]] = 0;
down_heap(0, *num_elem, pri_queue, val, map);
return ans;
}
void dijkstra(int *num_elem, int *pri_queue, int *d, int* map, list **e) {
while (*num_elem > 0) {
int v = dequeue(num_elem, pri_queue, d, map);
list *l = e[v];
while (l != NULL) {
int tmp_d = d[v] + l->cost;
if (tmp_d < d[l->op-1]) {
if (pri_queue[map[l->op-1]] != l->op-1) {
while (1) {
int a = 0;
a++;
}
}
d[l->op-1] = tmp_d;
up_heap(map[l->op-1], pri_queue, d, map);
}
l = l->next;
}
}
return;
}
int main () {
int n = 0;
int m = 0;
int res = 0;
list *e[100000] = {};
int d1[100000] = {};
int dn[100000] = {};
int pri_queue[100000] = {};
int num_elem = 0;
int map[100000] = {};
int visited[100000] = {};
res = scanf("%d", &n);
res = scanf("%d", &m);
for (int i = 0; i < m; i++) {
int a = 0;
int b = 0;
int c = 0;
res = scanf("%d", &a);
res = scanf("%d", &b);
res = scanf("%d", &c);
pool[used].op = b;
pool[used].cost = c;
pool[used].next = e[a-1];
e[a-1] = pool+used;
used++;
pool[used].op = a;
pool[used].cost = c;
pool[used].next = e[b-1];
e[b-1] = pool+used;
used++;
}
for (int i = 0; i < n; i++) {
d1[i] = INF;
dn[i] = INF;
pri_queue[num_elem] = i;
map[i] = num_elem;
num_elem++;
}
d1[0] = 0;
dn[n-1] = 0;
dijkstra(&num_elem, pri_queue, d1, map, e);
pri_queue[0] = n-1;
map[n-1] = 0;
num_elem = 1;
for (int i = 0; i < n - 1; i++) {
pri_queue[num_elem] = i;
map[i] = num_elem;
num_elem++;
}
dijkstra(&num_elem, pri_queue, dn, map, e);
for (int i = 0; i < n; i++) {
printf("%d\n", d1[i]+dn[i]);
}
return 0;
}
提出情報
| 提出日時 |
|
| 問題 |
013 - Passing(★5) |
| ユーザ |
chro4896 |
| 言語 |
C (GCC 9.2.1) |
| 得点 |
0 |
| コード長 |
3537 Byte |
| 結果 |
TLE |
| 実行時間 |
2205 ms |
| メモリ |
7200 KiB |
ジャッジ結果
| セット名 |
Sample |
All |
| 得点 / 配点 |
0 / 0 |
0 / 5 |
| 結果 |
|
|
| セット名 |
テストケース |
| Sample |
sample_1.txt, sample_2.txt, sample_3.txt |
| All |
killer_1.txt, killer_2.txt, killer_3.txt, line_1.txt, line_2.txt, line_3.txt, rand_1.txt, rand_2.txt, rand_3.txt, rand_4.txt, rand_5.txt, rand_6.txt, rand_7.txt, sample_1.txt, sample_2.txt, sample_3.txt, star_1.txt, star_2.txt, star_3.txt |
| ケース名 |
結果 |
実行時間 |
メモリ |
| killer_1.txt |
AC |
17 ms |
4228 KiB |
| killer_2.txt |
TLE |
2205 ms |
7000 KiB |
| killer_3.txt |
AC |
9 ms |
3980 KiB |
| line_1.txt |
AC |
60 ms |
7100 KiB |
| line_2.txt |
AC |
74 ms |
7124 KiB |
| line_3.txt |
AC |
77 ms |
7148 KiB |
| rand_1.txt |
TLE |
2205 ms |
6880 KiB |
| rand_2.txt |
TLE |
2205 ms |
6924 KiB |
| rand_3.txt |
TLE |
2205 ms |
6728 KiB |
| rand_4.txt |
TLE |
2205 ms |
6732 KiB |
| rand_5.txt |
TLE |
2205 ms |
6776 KiB |
| rand_6.txt |
TLE |
2205 ms |
6544 KiB |
| rand_7.txt |
TLE |
2205 ms |
6784 KiB |
| sample_1.txt |
AC |
13 ms |
4048 KiB |
| sample_2.txt |
AC |
4 ms |
3976 KiB |
| sample_3.txt |
AC |
4 ms |
3996 KiB |
| star_1.txt |
AC |
60 ms |
7148 KiB |
| star_2.txt |
AC |
59 ms |
7200 KiB |
| star_3.txt |
AC |
62 ms |
7108 KiB |