답안 #155125

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
155125 2019-09-26T13:43:27 Z Akashi 철인 이종 경기 (APIO18_duathlon) C++14
8 / 100
156 ms 29672 KB
#include <bits/stdc++.h>
using namespace std;

int n, m, nrc;
bool viz[100005];
int id[100005], h[100005], low[100005];
vector <int> v[100005];
set <int> v2[100005];
vector <int> ctc[100005];
stack <int> st;

void dfs(int nod, int papa = 0){
    st.push(nod);
    viz[nod] = 1;

    for(auto it : v[nod]){
        if(papa == it) continue ;

        if(!viz[it]){
            h[it] = low[it] = h[nod] + 1;
            dfs(it, nod);
            low[nod] = min(low[nod], low[it]);
        }
        else low[nod] = min(low[nod], low[it]);
    }

    if(low[nod] == h[nod]){
        int x;
        ++nrc;
        do{
            x = st.top();
            st.pop();

            id[x] = nrc;
            ctc[nrc].push_back(x);
        }while(x != nod);
    }
}

long long Sol1 = 0;
long long Sol2 = 0;
long long dp[100005][2];

void ctc_dfs(int nod){
    viz[nod] = 1;

    int sz = ctc[nod].size();
    Sol2 = Sol2 + 1LL * sz * (sz - 1) * (sz - 2);

    dp[nod][0] = sz;
    dp[nod][1] = 1LL * sz * (sz - 1);

    for(auto it : v2[nod]){
        if(viz[it]) continue ;

        ctc_dfs(it);

        dp[nod][0] += dp[it][0];
        dp[nod][1] = dp[nod][1] + dp[it][1] + 1LL * sz * dp[it][0];

        Sol1 = Sol1 + sz * dp[it][1] + 1LL * (sz - 1) * (sz - 1);
    }
}

int main()
{
//    freopen("1.in", "r", stdin);
//    freopen("1.out", "w", stdout);
    scanf("%d%d", &n, &m);

    int x, y;
    for(int i = 1; i <= m ; ++i){
        scanf("%d%d", &x, &y);

        v[x].push_back(y);
        v[y].push_back(x);
    }

    for(int i = 1; i <= n ; ++i){
        if(viz[i]) continue ;
        dfs(i);
    }

    for(int i = 1; i <= nrc ; ++i){
        for(auto nod : ctc[i]){
            for(auto it : v[nod]){
                if(id[it] != id[nod])
                    v2[i].insert(id[it]);
            }
        }
    }

    memset(viz, 0, sizeof(viz));
    for(int i = 1; i <= nrc ; ++i){
        if(viz[i]) continue ;
        ctc_dfs(i);
    }

    printf("%lld", Sol1 * 2LL + Sol2);

    return 0;
}

Compilation message

count_triplets.cpp: In function 'int main()':
count_triplets.cpp:69:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
     scanf("%d%d", &n, &m);
     ~~~~~^~~~~~~~~~~~~~~~
count_triplets.cpp:73:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d%d", &x, &y);
         ~~~~~^~~~~~~~~~~~~~~~
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 9848 KB Output is correct
2 Correct 10 ms 9848 KB Output is correct
3 Correct 10 ms 9852 KB Output is correct
4 Correct 11 ms 9848 KB Output is correct
5 Correct 10 ms 9848 KB Output is correct
6 Correct 10 ms 9848 KB Output is correct
7 Incorrect 10 ms 9848 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 9848 KB Output is correct
2 Correct 10 ms 9848 KB Output is correct
3 Correct 10 ms 9852 KB Output is correct
4 Correct 11 ms 9848 KB Output is correct
5 Correct 10 ms 9848 KB Output is correct
6 Correct 10 ms 9848 KB Output is correct
7 Incorrect 10 ms 9848 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 108 ms 24084 KB Output is correct
2 Correct 111 ms 24072 KB Output is correct
3 Correct 124 ms 26496 KB Output is correct
4 Correct 140 ms 25136 KB Output is correct
5 Correct 121 ms 22996 KB Output is correct
6 Correct 129 ms 26868 KB Output is correct
7 Correct 156 ms 25612 KB Output is correct
8 Correct 134 ms 26232 KB Output is correct
9 Correct 126 ms 24828 KB Output is correct
10 Correct 134 ms 24156 KB Output is correct
11 Correct 139 ms 21980 KB Output is correct
12 Correct 90 ms 21880 KB Output is correct
13 Correct 122 ms 21840 KB Output is correct
14 Correct 95 ms 21624 KB Output is correct
15 Correct 80 ms 21360 KB Output is correct
16 Correct 82 ms 20984 KB Output is correct
17 Correct 23 ms 15612 KB Output is correct
18 Correct 22 ms 15612 KB Output is correct
19 Correct 22 ms 15608 KB Output is correct
20 Correct 22 ms 15608 KB Output is correct
21 Correct 26 ms 15480 KB Output is correct
22 Correct 26 ms 15480 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Incorrect 13 ms 9976 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 140 ms 29532 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 17 ms 9976 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 141 ms 29672 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 9848 KB Output is correct
2 Correct 10 ms 9848 KB Output is correct
3 Correct 10 ms 9852 KB Output is correct
4 Correct 11 ms 9848 KB Output is correct
5 Correct 10 ms 9848 KB Output is correct
6 Correct 10 ms 9848 KB Output is correct
7 Incorrect 10 ms 9848 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 10 ms 9848 KB Output is correct
2 Correct 10 ms 9848 KB Output is correct
3 Correct 10 ms 9852 KB Output is correct
4 Correct 11 ms 9848 KB Output is correct
5 Correct 10 ms 9848 KB Output is correct
6 Correct 10 ms 9848 KB Output is correct
7 Incorrect 10 ms 9848 KB Output isn't correct
8 Halted 0 ms 0 KB -