Submission #73370522
Source Code Expand
Copy
#include <stdio.h>#include <stdlib.h>int n, m;int a[114514], b[114514];int ec[114514], *es[114514];int rec[114514], *res[114514];void ae(int f, int t) {es[f] = realloc(es[f], sizeof(*es[f]) * (ec[f] + 1));if (es[f] == NULL) exit(2);es[f][ec[f]++] = t;res[t] = realloc(res[t], sizeof(*res[t]) * (rec[t] + 1));if (res[t] == NULL) exit(2);res[t][rec[t]++] = f;}char visited1[114514];int order_cnt = 0;int order[114514];
#include <stdio.h>
#include <stdlib.h>
int n, m;
int a[114514], b[114514];
int ec[114514], *es[114514];
int rec[114514], *res[114514];
void ae(int f, int t) {
es[f] = realloc(es[f], sizeof(*es[f]) * (ec[f] + 1));
if (es[f] == NULL) exit(2);
es[f][ec[f]++] = t;
res[t] = realloc(res[t], sizeof(*res[t]) * (rec[t] + 1));
if (res[t] == NULL) exit(2);
res[t][rec[t]++] = f;
}
char visited1[114514];
int order_cnt = 0;
int order[114514];
void ksb1(int node) {
int i;
if (visited1[node]) return;
visited1[node] = 1;
for (i = 0; i < ec[node]; i++) {
ksb1(es[node][i]);
}
order[order_cnt++] = node;
}
int ksid = 0;
int ks[114514];
void ksb2(int node) {
int i;
if (ks[node]) return;
ks[node] = ksid;
for (i = 0; i < rec[node]; i++) {
ksb2(res[node][i]);
}
}
int incnt[114514];
int main(void) {
int i;
int ans = 0;
if (scanf("%d%d", &n, &m) != 2) return 1;
for (i = 0; i < m; i++) {
if (scanf("%d%d", &a[i], &b[i]) != 2) return 1;
ae(a[i], b[i]);
}
for (i = 1; i <= n; i++) {
ksb1(i);
}
for (i = n - 1; i >= 0; i--) {
if (ks[order[i]] == 0) {
ksid++;
ksb2(order[i]);
}
}
for (i = 0; i < m; i++) {
if (ks[a[i]] != ks[b[i]]) incnt[ks[b[i]]]++;
}
for (i = 1; i <= ksid; i++) {
if (incnt[i] == 0) ans++;
}
printf("%d\n", ans);
return 0;
}
/*
強連結成分分解して、入次数0の頂点を、かつそれのみを選ぶ
強連結成分分解の意味とアルゴリズム | 高校数学の美しい物語
https://manabitimes.jp/math/1250
*/
Submission Info
| Submission Time | |
|---|---|
| Task | advertisement - 宣伝 (Advertisement) |
| User | mikecat |
| Language | C23 (GCC 14.2.0) |
| Score | 100 |
| Code Size | 1582 Byte |
| Status | AC |
| Exec Time | 20 ms |
| Memory | 10076 KiB |
Judge Result
| Set Name | Set01 | Set02 | Set03 | Set04 | Set05 | Set06 | Set07 | Set08 | Set09 | Set10 | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Score / Max Score | 10 / 10 | 10 / 10 | 10 / 10 | 10 / 10 | 10 / 10 | 10 / 10 | 10 / 10 | 10 / 10 | 10 / 10 | 10 / 10 | ||||||||||||||||||||
| Status |
|
|
|
|
|
|
|
|
|
|
| Set Name | Test Cases |
|---|---|
| Set01 | 01 |
| Set02 | 02 |
| Set03 | 03 |
| Set04 | 04 |
| Set05 | 05 |
| Set06 | 06 |
| Set07 | 07 |
| Set08 | 08 |
| Set09 | 09 |
| Set10 | 10 |
| Case Name | Status | Exec Time | Memory |
|---|---|---|---|
| 01 | AC | 0 ms | 1872 KiB |
| 02 | AC | 0 ms | 1724 KiB |
| 03 | AC | 0 ms | 1844 KiB |
| 04 | AC | 0 ms | 1872 KiB |
| 05 | AC | 0 ms | 1760 KiB |
| 06 | AC | 0 ms | 1732 KiB |
| 07 | AC | 0 ms | 1684 KiB |
| 08 | AC | 6 ms | 3336 KiB |
| 09 | AC | 19 ms | 6880 KiB |
| 10 | AC | 20 ms | 10076 KiB |