Logo Wy Online Judge

WyOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#473#93. 「NOIP2020」排水系统Pigsyy90299ms8364kbC++232.0kb2025-04-24 20:49:322025-04-24 20:49:32

answer

#include <bits/stdc++.h>
#define ll long long
using namespace std;
const int N = 1e5 + 5;
int n, m, d[N], es[N][6];
int q[N], deg[N];
ll gcd(ll a, ll b) {
    if (a == 0)
        return b;

    if (b == 0)
        return a;

    return gcd(b, a % b);
}
struct node {
    ll a, b;
    inline node operator + (const node &aa) {
        ll val = gcd(b, aa.b);
        val = (b / val) * aa.b;
        return (node) {
            val / b *a + val / aa.b *aa.a, val
        };
    }
    inline void calc() {
        ll val = gcd(a, b);
        a /= val, b /= val;
    }
} dp[N];
inline void ffr(int &ret) {
    ret = 0;
    register int ch = getchar();

    while (!isdigit(ch))
        ch = getchar();

    while (isdigit(ch))
        ret = ret * 10 + (ch ^ 48), ch = getchar();
}
void ks(ll val) {
    int st[30], top = 0;

    if (val == 0) {
        putchar(48);
        return;
    }

    while (val)
        st[++top] = val % 10, val /= 10;

    for (register int i = top; i >= 1; --i)
        putchar(st[i] ^ 48);
}
int main() {
    ffr(n), ffr(m);

    for (register int i = 1; i <= n; ++i) {
        ffr(d[i]), dp[i] = (node) {
            0, 1
        };

        for (register int j = 1; j <= d[i]; ++j)
            ffr(es[i][j]), ++deg[es[i][j]];
    }

    register int l = 1, r = 0;

    for (register int i = 1; i <= m; ++i)
        q[++r] = i, dp[i] = (node) {
        1, 1
    };

    while (l <= r) {
        int u = q[l++];
        node tmp = dp[u];
        ll gg = gcd(tmp.a, d[u]);
        int val = d[u];
        tmp.a /= gg, val /= gg, tmp.b *= val;

        for (register int i = 1; i <= d[u]; ++i) {
            int v = es[u][i];
            dp[v] = dp[v] + tmp;

            if ((--deg[v]) == 0)
                q[++r] = v;
        }
    }

    for (register int i = 1; i <= n; ++i)
        if (d[i] == 0) {
            dp[i].calc();
            ks(dp[i].a);
            putchar(' ');
            ks(dp[i].b);
            putchar('\n');
        }

    return 0;
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 10
Accepted
time: 4ms
memory: 5404kb

input:

10 1
4 2 3 4 5
3 6 7 8
3 7 10 8
1 7
2 8 10
2 8 9
2 9 8
1 10
1 10
0

output:

1 1

result:

ok 2 tokens

Test #2:

score: 10
Accepted
time: 4ms
memory: 5292kb

input:

10 1
5 2 3 4 5 7
3 6 7 9
3 7 8 9
3 8 9 6
1 7
2 9 10
2 10 9
0
0
0

output:

2 15
8 15
1 3

result:

ok 6 tokens

Test #3:

score: 10
Accepted
time: 4ms
memory: 5348kb

input:

10 1
5 2 3 4 5 8
4 6 8 7 9
2 7 6
4 8 6 9 10
2 9 8
1 10
0
0
1 10
0

output:

3 20
2 5
9 20

result:

ok 6 tokens

Test #4:

score: 10
Accepted
time: 2ms
memory: 5356kb

input:

1000 1
5 2 3 4 5 468
5 6 7 8 9 72
5 10 11 12 13 658
5 14 15 16 17 100
5 18 19 20 21 129
5 22 23 24 2...

output:

1 625
1 625
1 625
1 625
1 625
1 625
1 625
1 3125
1 3125
2 3125
3 3125
2 3125
47 37500
1 2500
1 2500
...

result:

ok 636 tokens

Test #5:

score: 10
Accepted
time: 5ms
memory: 5308kb

input:

1000 1
5 2 3 4 5 257
5 6 7 8 9 948
5 10 11 12 13 633
5 14 15 16 17 1000
5 18 19 20 21 105
5 22 23 24...

output:

1 625
1 625
6 625
2 625
1 625
1 625
1 625
1 625
1 625
1 625
1 500
1 1875
1 1250
1 2500
9 6250
1 2500...

result:

ok 626 tokens

Test #6:

score: 10
Accepted
time: 3ms
memory: 5480kb

input:

1000 1
5 2 3 4 5 799
5 6 7 8 9 587
5 10 11 12 13 694
5 14 15 16 17 865
5 18 19 20 21 10
5 22 23 24 2...

output:

1 625
1 625
1 625
1 625
1 625
1 625
2 625
6 625
9 6250
9 2500
1 2000
9 10000
1 2500
1 2500
1 2500
2 ...

result:

ok 652 tokens

Test #7:

score: 10
Accepted
time: 70ms
memory: 8052kb

input:

100000 1
5 2 3 4 5 7783
5 6 7 8 9 21991
5 10 11 12 13 45651
5 14 15 16 17 56745
5 18 19 20 21 84002
...

output:

1 15625
1 15625
1 15625
1 15625
1 15625
1 78125
1 62500
1 78125
1 78125
1 78125
1 78125
1 78125
2 78...

result:

ok 93056 tokens

Test #8:

score: 10
Accepted
time: 57ms
memory: 7500kb

input:

100000 1
5 2 3 4 5 6025
5 6 7 8 9 32221
5 10 11 12 13 39240
5 14 15 16 17 55392
5 18 19 20 21 69386
...

output:

1 12500
1 15625
1 15625
1 15625
1 15625
1 12500
1 15625
1 12500
1 12500
1 15625
1 15625
1 15625
1 12...

result:

ok 84746 tokens

Test #9:

score: 10
Accepted
time: 70ms
memory: 8344kb

input:

100000 10
5 11 12 13 14 15
3 66 67 68
4 96 97 98 99
5 1274 1643 2223 2242 2626
5 5407 8119 10748 198...

output:

1 48828125
2538341 10546875000
15673 2343750000
759673 2343750000
54145169317349 3023308800000000000...

result:

ok 64816 tokens

Test #10:

score: 0
Wrong Answer
time: 80ms
memory: 8364kb

input:

100000 10
5 11 12 13 14 15
3 66 67 68
4 98 99 100 101
5 193 213 239 613 1656
5 187 259 453 513 3129
...

output:

1 48828125
1 48828125
191216299 675000000000
3778533703 48600000000000
5172390763527 

result:

wrong answer 9th words differ - expected: '214192764230063', found: '5172390763527'