Submission #982328

#TimeUsernameProblemLanguageResultExecution timeMemory
982328Ghulam_JunaidDuathlon (APIO18_duathlon)C++17
5 / 100
1006 ms600 KiB
#include <bits/stdc++.h>
using namespace std;

const int N = 55;
int n, m;
vector<int> g[N];
bool vis[N];

void dfs(int v){
    if (vis[v]) return;
    vis[v] = 1;
    for (int u : g[v])
        if (!vis[u])
            dfs(u);
}

int main(){
    cin >> n >> m;

    for (int i = 0; i < m; i ++){
        int u, v;
        cin >> u >> v;
        g[u].push_back(v);
        g[v].push_back(u);
    }

    int ans = 0;
    for (int c = 1; c <= n; c ++){
        for (int s = 1; s <= n; s ++){
            for (int f = s + 1; f <= n; f ++){
                if (s == c or s == f or c == f) continue;

                bool good = 1;
                for (int e = 1; e <= n; e ++){
                    if (e == c) continue;

                    memset(vis, 0, sizeof vis);
                    vis[e] = 1;
                    dfs(s);

                    if (vis[c]) continue;

                    vis[e] = 1;
                    dfs(f);

                    if (vis[c]) continue;
                    
                    good = 0;
                    break;
                }

                ans += good;
            }
        }
    }

    cout << ans * 2 << endl;
}

/*

There is some vertex mid i.e every path from c to f and c to s goes through it.
if there is no such vertex then (s, c, f) is a valid tuple.

*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...