結果
| 問題 |
No.1477 Lamps on Graph
|
| コンテスト | |
| ユーザー |
sten_san
|
| 提出日時 | 2021-07-03 03:43:22 |
| 言語 | C (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 3,058 bytes |
| コンパイル時間 | 1,632 ms |
| コンパイル使用メモリ | 32,000 KB |
| 実行使用メモリ | 10,368 KB |
| 最終ジャッジ日時 | 2024-06-29 21:50:53 |
| 合計ジャッジ時間 | 10,043 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 3 WA * 32 RE * 3 |
ソースコード
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
#include <stdbool.h>
typedef struct vector {
void *head;
size_t used, capa;
} *vector;
#define vector_make(...) vector_make_overload(__VA_ARGS__, vector_make_2, vector_make_1)(__VA_ARGS__)
#define vector_make_1(bsize) vector_make_(bsize)
#define vector_make_2(type, size) vector_make_(sizeof(type) * (size))
#define vector_make_overload(arg1, arg2, name, ...) name
#define vector_resize(type, vec, size) vector_resize_(vec, sizeof(type) * (size))
#define vector_index(type, vec, index) ((type *)(vec)->head)[index]
#define vector_size(type, vec) ((vec)->used / sizeof(type))
#define vector_push_back(type, vec, value) \
do { \
vector_resize(type, vec, vector_size(type, vec) + 1); \
vector_index(type, vec, vector_size(type, vec) - 1) = value; \
} while (0)
vector vector_make_(size_t bsize) {
vector v = malloc(sizeof(struct vector));
if (v == NULL) {
return NULL;
}
v->head = malloc(bsize);
if (v->head == NULL) {
free(v);
return NULL;
}
v->used = bsize;
v->capa = bsize;
return v;
}
bool vector_resize_(vector v, size_t bsize) {
if (bsize <= v->capa) {
v->used = bsize;
return true;
}
size_t new_capa = (bsize + v->capa) / (v->capa + 1) * (v->capa + 1);
void *new = realloc(v->head, new_capa);
if (new == NULL) {
return false;
}
v->head = new;
v->used = bsize;
v->capa = new_capa;
return true;
}
int main() {
int n, m;
scanf("%d %d", &n, &m);
vector a = vector_make(int, n);
for (int i = 0; i < n; ++i) {
scanf("%d", &vector_index(int, a, i));
}
vector g = vector_make(vector, n);
for (int i = 0; i < n; ++i) {
vector_index(vector, g, i) = vector_make(int, 0);
}
for (int i = 0; i < m; ++i) {
int u, v;
scanf("%d %d", &u, &v);
--u; --v;
vector_push_back(int, vector_index(vector, g, u), v);
vector_push_back(int, vector_index(vector, g, v), i);
}
vector lamp = vector_make(bool, n);
for (int i = 0; i < n; ++i) {
vector_index(bool, lamp, i) = false;
}
int k;
scanf("%d", &k);
for (int i = 0; i < k; ++i) {
int b;
scanf("%d", &b);
--b;
vector_index(bool, lamp, b) = true;
}
vector x = vector_make(int, 0);
for (int i = 0; i < n; ++i) {
if (!vector_index(bool, lamp, i)) {
continue;
}
vector_push_back(int, x, i);
vector list = vector_index(vector, g, i);
vector_index(bool, lamp, i) = false;
for (int j = 0; j < vector_size(int, list); ++j) {
int v = vector_index(int, list, j);
if (vector_index(int, a, i) < vector_index(int, a, v)) {
vector_index(bool, lamp, v) ^= 1;
}
}
}
printf("%zu\n", vector_size(int, x));
for (int i = 0; i < vector_size(int, x); ++i) {
printf("%d\n", vector_index(int, x, i) + 1);
}
}
sten_san