답안 #155124

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
155124 2019-09-26T13:42:46 Z Akashi 철인 이종 경기 (APIO18_duathlon) C++14
0 / 100
4 ms 632 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[105];
set <int> v2[105];
vector <int> ctc[105];
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 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 504 KB Output is correct
4 Correct 2 ms 504 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Incorrect 2 ms 504 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 504 KB Output is correct
4 Correct 2 ms 504 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Incorrect 2 ms 504 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3 ms 504 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3 ms 632 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 2 ms 376 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 4 ms 632 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Runtime error 3 ms 504 KB Execution killed with signal 11 (could be triggered by violating memory limits)
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 504 KB Output is correct
4 Correct 2 ms 504 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Incorrect 2 ms 504 KB Output isn't correct
8 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 376 KB Output is correct
2 Correct 2 ms 376 KB Output is correct
3 Correct 2 ms 504 KB Output is correct
4 Correct 2 ms 504 KB Output is correct
5 Correct 2 ms 376 KB Output is correct
6 Correct 2 ms 376 KB Output is correct
7 Incorrect 2 ms 504 KB Output isn't correct
8 Halted 0 ms 0 KB -