Submission #1362024

#TimeUsernameProblemLanguageResultExecution timeMemory
1362024po_rag526Duathlon (APIO18_duathlon)C++20
49 / 100
1096 ms17516 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
#define endl '\n'
#define pb push_back
const int N=1e5+5,MAXA=1e6+5,inf=2e9+5,MOD=982451653;
vector<int> adj[N];
int low[N],depth[N],C,sz[N],ans=0;
void dfs(int node,int par){
    depth[node]=depth[par]+1;
    low[node]=depth[node]; sz[node]=1;
    for(auto i:adj[node]){
        if(i==par)continue;
        if(!depth[i]){
            dfs(i,node);
            low[node]=min(low[node],low[i]);
            sz[node]+=sz[i];
        }
        else low[node]=min(low[node],depth[i]);
    }
}
multiset<int> bridge;
void dfs2(int node){
    int minus=1;
    for(auto i:adj[node]){
        if(depth[i]==depth[node]+1 && low[i]>=depth[node])minus+=sz[i];
    }
    if(node!=C){
       // cout<<C<<' '<<sz[C]<<' '<<(bridge.empty()?minus:*bridge.rbegin())<<endl;
        ans+=sz[C]-(bridge.empty()?minus:*bridge.rbegin())-1;
    }
    for(auto i:adj[node]){
        if(depth[i]==depth[node]+1){
            if(low[i]>=depth[node] && node!=C)bridge.insert(minus);
            dfs2(i);
            if(low[i]>=depth[node] && node!=C)bridge.extract(minus);
        }
    }
}
signed main(){
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
    int n,m; cin>>n>>m;
    for(int i=0;i<m;i++){
        int x,y; cin>>x>>y;
        adj[x].pb(y); adj[y].pb(x);
    }
    for(int c=1;c<=n;c++){
        for(int j=1;j<=n;j++)low[j]=depth[j]=sz[j]=0; bridge.clear();
        dfs(c,0);
        C=c;
        dfs2(c);
    }
    cout<<ans;
}
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...
#Result Execution timeMemoryGrader output
Fetching results...