Submission #60169

# Submission time Handle Problem Language Result Execution time Memory
60169 2018-07-23T20:06:36 Z duality Duathlon (APIO18_duathlon) C++11
31 / 100
320 ms 41816 KB
#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define mp make_pair
typedef long long int LLI;
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef vector<pii> vpii;

vi adjList[100000];
int disc[100000],low[100000],art[100000],num = 0;
vi com[100000];
vpii S;
int bcc = 0;
int doDFS(int u,int p) {
    int i,c = 0;
    disc[u] = low[u] = num++;
    for (i = 0; i < adjList[u].size(); i++) {
        int v = adjList[u][i];
        if (disc[v] == -1) {
            c++;
            S.pb(mp(u,v));
            doDFS(v,u);
            low[u] = min(low[u],low[v]);
            if (((p == -1) && (c > 1)) || ((p != -1) && (low[v] >= disc[u]))) {
                art[u] = 1;
                while (1) {
                    int uu = S.back().first,vv = S.back().second;
                    S.pop_back();
                    com[bcc].pb(uu),com[bcc].pb(vv);
                    if ((u == uu) && (v == vv)) break;
                }
                bcc++;
            }
        }
        else if ((v != p) && (disc[v] < disc[u])) low[u] = min(low[u],disc[v]),S.pb(mp(u,v));
    }
    return 0;
}
int size[100000];
vi adjList2[200000];
LLI ans = 0;
int visited[200000],sub[200000];
int doDFS2(int u,int p) {
    int i;
    sub[u] = (u < bcc) ? size[u]:0;
    visited[u] = 1;
    for (i = 0; i < adjList2[u].size(); i++) {
        int v = adjList2[u][i];
        if (v != p) sub[u] += doDFS2(v,u);
    }
    return sub[u];
}
int doDFS3(int u,int p,int r) {
    int i;
    if (u < bcc) {
        ans += 2LL*size[u]*sub[u]*(sub[r]-sub[u]+size[u]);
        ans -= 2LL*size[u]*size[u]*size[u];
    }
    for (i = 0; i < adjList2[u].size(); i++) {
        int v = adjList2[u][i];
        if (v != p) doDFS3(v,u,r);
    }
    return 0;
}
int main() {
    int i;
    int n,m,u,v;
    scanf("%d %d",&n,&m);
    for (i = 0; i < m; i++) {
        scanf("%d %d",&u,&v);
        u--,v--;
        adjList[u].pb(v);
        adjList[v].pb(u);
    }

    int j;
    for (i = 0; i < n; i++) disc[i] = low[i] = -1;
    for (i = 0; i < n; i++) {
        if (disc[i] == -1) {
            doDFS(i,-1);
            if (!S.empty()) {
                while (!S.empty()) {
                    int u = S.back().first,v = S.back().second;
                    S.pop_back();
                    com[bcc].pb(u),com[bcc].pb(v);
                }
                bcc++;
            }
        }
    }
    for (i = 0; i < bcc; i++) {
        sort(com[i].begin(),com[i].end());
        com[i].resize(unique(com[i].begin(),com[i].end())-com[i].begin());
        for (j = 0; j < com[i].size(); j++) {
            if (art[com[i][j]]) {
                adjList2[i].pb(com[i][j]+bcc);
                adjList2[com[i][j]+bcc].pb(i);
            }
        }
        size[i] = com[i].size()-1;
        ans += (LLI) com[i].size()*(com[i].size()-1)*(com[i].size()-2);
        ans += (LLI) size[i]*size[i];
    }
    for (i = 0; i < bcc; i++) {
        if (!visited[i]) {
            doDFS2(i,-1),doDFS3(i,-1,i);
            ans -= (LLI) sub[i]*sub[i];
        }
    }
    printf("%lld\n",ans);

    return 0;
}

Compilation message

count_triplets.cpp: In function 'int doDFS(int, int)':
count_triplets.cpp:18:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (i = 0; i < adjList[u].size(); i++) {
                 ~~^~~~~~~~~~~~~~~~~~~
count_triplets.cpp: In function 'int doDFS2(int, int)':
count_triplets.cpp:48:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (i = 0; i < adjList2[u].size(); i++) {
                 ~~^~~~~~~~~~~~~~~~~~~~
count_triplets.cpp: In function 'int doDFS3(int, int, int)':
count_triplets.cpp:60:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for (i = 0; i < adjList2[u].size(); i++) {
                 ~~^~~~~~~~~~~~~~~~~~~~
count_triplets.cpp: In function 'int main()':
count_triplets.cpp:95:23: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for (j = 0; j < com[i].size(); j++) {
                     ~~^~~~~~~~~~~~~~~
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:71:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf("%d %d",&u,&v);
         ~~~~~^~~~~~~~~~~~~~~
# Verdict Execution time Memory Grader output
1 Correct 11 ms 9720 KB Output is correct
2 Correct 13 ms 9864 KB Output is correct
3 Correct 13 ms 9996 KB Output is correct
4 Correct 11 ms 9996 KB Output is correct
5 Correct 13 ms 9996 KB Output is correct
6 Correct 12 ms 9996 KB Output is correct
7 Incorrect 12 ms 9996 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 11 ms 9720 KB Output is correct
2 Correct 13 ms 9864 KB Output is correct
3 Correct 13 ms 9996 KB Output is correct
4 Correct 11 ms 9996 KB Output is correct
5 Correct 13 ms 9996 KB Output is correct
6 Correct 12 ms 9996 KB Output is correct
7 Incorrect 12 ms 9996 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 178 ms 27224 KB Output is correct
2 Correct 166 ms 27224 KB Output is correct
3 Correct 227 ms 27224 KB Output is correct
4 Correct 206 ms 27224 KB Output is correct
5 Correct 246 ms 27224 KB Output is correct
6 Correct 268 ms 27224 KB Output is correct
7 Correct 249 ms 27224 KB Output is correct
8 Correct 267 ms 27224 KB Output is correct
9 Correct 256 ms 27224 KB Output is correct
10 Correct 227 ms 27224 KB Output is correct
11 Correct 176 ms 27224 KB Output is correct
12 Correct 187 ms 27224 KB Output is correct
13 Correct 121 ms 27224 KB Output is correct
14 Correct 120 ms 27224 KB Output is correct
15 Correct 88 ms 27224 KB Output is correct
16 Correct 119 ms 27224 KB Output is correct
17 Correct 16 ms 27224 KB Output is correct
18 Correct 15 ms 27224 KB Output is correct
19 Correct 15 ms 27224 KB Output is correct
20 Correct 13 ms 27224 KB Output is correct
21 Correct 14 ms 27224 KB Output is correct
22 Correct 15 ms 27224 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 14 ms 27224 KB Output is correct
2 Correct 15 ms 27224 KB Output is correct
3 Correct 14 ms 27224 KB Output is correct
4 Correct 12 ms 27224 KB Output is correct
5 Correct 13 ms 27224 KB Output is correct
6 Correct 12 ms 27224 KB Output is correct
7 Correct 12 ms 27224 KB Output is correct
8 Correct 12 ms 27224 KB Output is correct
9 Correct 12 ms 27224 KB Output is correct
10 Correct 13 ms 27224 KB Output is correct
11 Correct 16 ms 27224 KB Output is correct
12 Correct 12 ms 27224 KB Output is correct
13 Correct 13 ms 27224 KB Output is correct
14 Correct 15 ms 27224 KB Output is correct
15 Correct 13 ms 27224 KB Output is correct
16 Correct 14 ms 27224 KB Output is correct
17 Correct 13 ms 27224 KB Output is correct
18 Correct 13 ms 27224 KB Output is correct
19 Correct 11 ms 27224 KB Output is correct
20 Correct 14 ms 27224 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 206 ms 27224 KB Output is correct
2 Correct 225 ms 27224 KB Output is correct
3 Correct 260 ms 27224 KB Output is correct
4 Correct 286 ms 28352 KB Output is correct
5 Correct 249 ms 29560 KB Output is correct
6 Correct 320 ms 41816 KB Output is correct
7 Correct 242 ms 41816 KB Output is correct
8 Correct 235 ms 41816 KB Output is correct
9 Correct 274 ms 41816 KB Output is correct
10 Correct 257 ms 41816 KB Output is correct
11 Correct 242 ms 41816 KB Output is correct
12 Correct 232 ms 41816 KB Output is correct
13 Correct 232 ms 41816 KB Output is correct
14 Correct 165 ms 41816 KB Output is correct
15 Correct 136 ms 41816 KB Output is correct
16 Correct 104 ms 41816 KB Output is correct
17 Correct 125 ms 41816 KB Output is correct
18 Correct 134 ms 41816 KB Output is correct
19 Correct 113 ms 41816 KB Output is correct
20 Correct 125 ms 41816 KB Output is correct
# Verdict Execution time Memory Grader output
1 Correct 11 ms 41816 KB Output is correct
2 Correct 12 ms 41816 KB Output is correct
3 Incorrect 12 ms 41816 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 229 ms 41816 KB Output is correct
2 Correct 219 ms 41816 KB Output is correct
3 Incorrect 238 ms 41816 KB Output isn't correct
4 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 11 ms 9720 KB Output is correct
2 Correct 13 ms 9864 KB Output is correct
3 Correct 13 ms 9996 KB Output is correct
4 Correct 11 ms 9996 KB Output is correct
5 Correct 13 ms 9996 KB Output is correct
6 Correct 12 ms 9996 KB Output is correct
7 Incorrect 12 ms 9996 KB Output isn't correct
8 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Correct 11 ms 9720 KB Output is correct
2 Correct 13 ms 9864 KB Output is correct
3 Correct 13 ms 9996 KB Output is correct
4 Correct 11 ms 9996 KB Output is correct
5 Correct 13 ms 9996 KB Output is correct
6 Correct 12 ms 9996 KB Output is correct
7 Incorrect 12 ms 9996 KB Output isn't correct
8 Halted 0 ms 0 KB -