QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#316679#7177. Many Many CyclesMinhhoWA 1ms5864kbC++172.6kb2024-01-28 01:53:572024-01-28 01:53:57

Judging History

你现在查看的是最新测评结果

  • [2024-01-28 01:53:57]
  • 评测
  • 测评结果:WA
  • 用时:1ms
  • 内存:5864kb
  • [2024-01-28 01:53:57]
  • 提交

answer

#define taskname "C"
#include <bits/stdc++.h>
#define int long long
#define ii pair<int,int>
#define ff first
#define ss second

using namespace std;
const int maxn = 1e4 + 10;
vector<ii> adj[maxn];
int pa[maxn][20], dep[maxn], dis[maxn], p[maxn], n, m;
array<int, 4> e[maxn];

inline int fp(int u) {return !p[u] ? u : p[u] = fp(p[u]);}

inline bool uni(int u, int v)
{
    if ((u = fp(u)) == (v = fp(v))) return 0;
    return p[v] = u;
}

void DFS(int u = 1, int par = 0)
{
    for (auto [v, c]: adj[u]) if (v != par)
    {
        dep[v] = dep[u] + 1;
        dis[v] = dis[u] + c;
        pa[v][0] = u;
        DFS(v, u);
    }
}

inline int lca(int u, int v)
{
    if (dep[u] > dep[v]) swap(u, v);
    int dif = dep[v] - dep[u];
    for (int i=19; i>=0; i--) if (dif >> i & 1) v = pa[v][i];
    if (v == u) return u;
    for (int i=19; i>=0; i--) if (pa[v][i] != pa[u][i]) v = pa[v][i], u = pa[u][i];
    return pa[u][0];
}

inline int cal(int u, int v) {return dis[u] + dis[v] - 2 * dis[lca(u, v)];}

inline int sol(int m, int u, int v, int add)
{
    if (dep[u] > dep[v]) swap(u, v);
    int l = lca(u, v);
    if (m == l) return 0;
    if (l == u && lca(m, v) == m) return 0;
    else if ((lca(m, v) == m || lca(m, u) == m) && lca(m, l) != m) return 0;
    return add + cal(u, v);
}

mt19937 rng(chrono::high_resolution_clock::now().time_since_epoch().count());

signed main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(nullptr); cout.tie(nullptr);
    cin>>n>>m;
    for (int i=1; i<=m; i++) cin>>e[i][1]>>e[i][2]>>e[i][0], e[i][3] = i;
    shuffle(e+1, e+m+1, rng);
    vector<int> ve;
    for (int i=1; i<=m; i++) if (uni(e[i][1], e[i][2]))
    {
        adj[e[i][1]].emplace_back(e[i][2], e[i][0]);
        adj[e[i][2]].emplace_back(e[i][1], e[i][0]);
    } else ve.emplace_back(i);

    DFS();
    for (int i=1; i<20; i++)
        for (int j=1; j<=n; j++)
            pa[j][i] = pa[pa[j][i-1]][i-1];

    int ans = 0;
    for (int i=0; i<ve.size()-1; i++)
        for (int j=i+1; j<ve.size(); j++)
        {
            auto [c1, u1, v1, id1] = e[ve[i]];
            auto [c2, u2, v2, id2] = e[ve[j]];
            int add = c1 + c2;
            if (u1 == u2) ans = __gcd(ans, sol(u1, v1, v2, add));
            else if (u1 == v2) ans = __gcd(ans, sol(u1, u2, v1, add));
            else if (v1 == u2) ans = __gcd(ans, sol(v1, u1, v2, add));
            else if (v1 == v2) ans = __gcd(ans, sol(v1, u1, u2, add));
        }
    for (int i: ve)
    {
        auto [c, u, v, id] = e[i];
        ans = __gcd(ans, c + cal(u, v));
    }
    cout<<ans;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 5772kb

input:

4 4
1 2 1
2 3 1
3 4 1
4 1 1

output:

4

result:

ok answer is '4'

Test #2:

score: 0
Accepted
time: 1ms
memory: 3920kb

input:

4 5
1 2 1
1 3 2
1 4 1
2 3 1
3 4 1

output:

4

result:

ok answer is '4'

Test #3:

score: 0
Accepted
time: 1ms
memory: 3920kb

input:

20 50
1 2 8
1 3 1
3 4 5
3 5 9
3 6 5
6 7 6
7 8 8
2 9 2
8 10 3
8 11 7
8 12 5
3 13 4
7 14 3
6 15 7
9 16 6
8 17 7
16 18 9
16 19 3
18 20 10
11 3 2
17 1 1
16 2 2
15 1 1
10 3 2
9 1 2
19 2 1
6 1 2
7 3 1
17 3 2
15 3 2
8 6 2
5 1 2
8 1 2
12 1 1
12 7 1
4 1 2
18 2 1
11 7 1
14 1 1
18 1 1
18 9 1
10 6 1
14 3 2
20 2...

output:

2

result:

ok answer is '2'

Test #4:

score: 0
Accepted
time: 1ms
memory: 3920kb

input:

20 50
1 2 18468
1 3 26501
3 4 15725
3 5 29359
3 6 24465
6 7 28146
7 8 16828
2 9 492
8 10 11943
8 11 5437
8 12 14605
3 13 154
7 14 12383
6 15 18717
9 16 19896
8 17 21727
16 18 11539
16 19 19913
18 20 26300
11 3 2
17 1 1
16 2 2
15 1 1
10 3 2
9 1 2
19 2 1
6 1 2
7 3 1
17 3 2
15 3 2
8 6 2
5 1 2
8 1 2
12 ...

output:

1

result:

ok answer is '1'

Test #5:

score: 0
Accepted
time: 1ms
memory: 4004kb

input:

100 150
1 2 184676335
1 3 191705725
1 4 293606963
1 5 57078146
2 6 168279962
6 7 29961943
5 8 54392392
5 9 39020154
5 10 123837422
7 11 197199896
3 12 217274772
7 13 18709913
6 14 263007036
11 15 287053812
3 16 303347674
9 17 151417712
17 18 68705548
15 19 326652758
12 20 128598724
2 21 275290779
11...

output:

3

result:

ok answer is '3'

Test #6:

score: 0
Accepted
time: 1ms
memory: 4144kb

input:

100 130
1 2 184676335
1 3 191705725
1 4 293606963
1 5 57078146
2 6 168279962
6 7 29961943
5 8 54392392
5 9 39020154
5 10 123837422
7 11 197199896
3 12 217274772
7 13 18709913
6 14 263007036
11 15 287053812
3 16 303347674
9 17 151417712
17 18 68705548
15 19 326652758
12 20 128598724
2 21 275290779
11...

output:

7

result:

ok answer is '7'

Test #7:

score: 0
Accepted
time: 0ms
memory: 5864kb

input:

100 200
1 2 184676335
1 3 191705725
1 4 293606963
1 5 57078146
2 6 168279962
6 7 29961943
5 8 54392392
5 9 39020154
5 10 123837422
7 11 197199896
3 12 217274772
7 13 18709913
6 14 263007036
11 15 287053812
3 16 303347674
9 17 151417712
17 18 68705548
15 19 326652758
12 20 128598724
2 21 275290779
11...

output:

4

result:

ok answer is '4'

Test #8:

score: -100
Wrong Answer
time: 1ms
memory: 3928kb

input:

100 190
1 2 184676335
1 3 191705725
1 4 293606963
1 5 57078146
2 6 168279962
6 7 29961943
5 8 54392392
5 9 39020154
5 10 123837422
7 11 197199896
3 12 217274772
7 13 18709913
6 14 263007036
11 15 287053812
3 16 303347674
9 17 151417712
17 18 68705548
15 19 326652758
12 20 128598724
2 21 275290779
11...

output:

4

result:

wrong answer expected '2', found '4'