답안 #250548

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
250548 2020-07-18T10:23:11 Z rrrr10000 철인 이종 경기 (APIO18_duathlon) C++14
31 / 100
239 ms 38248 KB
#include <bits/stdc++.h>
using namespace std;
#define rep(i, n)  for(long long i=0;i<(long long)(n);i++)
#define REP(i,k,n) for(long long i=k;i<(long long)(n);i++)
#define all(a) a.begin(),a.end()
#define pb emplace_back
#define eb emplace_back
#define lb(v,k) (lower_bound(all(v),k)-v.begin())
#define ub(v,k) (upper_bound(all(v),k)-v.begin())
#define fi first
#define se second
#define pi M_PI
#define PQ(T) priority_queue<T>
#define SPQ(T) priority_queue<T,vector<T>,greater<T>>
#define dame(a) {out(a);return 0;}
#define decimal cout<<fixed<<setprecision(15);
#define dupli(a) a.erase(unique(all(a)),a.end())
typedef long long ll;
typedef pair<ll,ll> P;
typedef tuple<ll,ll,ll> PP;
typedef tuple<ll,ll,ll,ll> PPP;
typedef multiset<ll> S;
using vi=vector<ll>;
using vvi=vector<vi>;
using vvvi=vector<vvi>;
using vvvvi=vector<vvvi>;
using vp=vector<P>;
using vvp=vector<vp>;
using vb=vector<bool>;
using vvb=vector<vb>;
const ll inf=1001001001001001001;
const ll INF=1001001001;
const ll mod=1000000007;
const double eps=1e-10;
template<class T> bool chmin(T&a,T b){if(a>b){a=b;return true;}return false;}
template<class T> bool chmax(T&a,T b){if(a<b){a=b;return true;}return false;}
template<class T> void out(T a){cout<<a<<'\n';}
template<class T> void outp(T a){cout<<'('<<a.fi<<','<<a.se<<')'<<'\n';}
template<class T> void outvp(T v){rep(i,v.size())cout<<'('<<v[i].fi<<','<<v[i].se<<')';cout<<'\n';}
template<class T> void outvvp(T v){rep(i,v.size())outvp(v[i]);}
template<class T> void outv(T v){rep(i,v.size()){if(i)cout<<' ';cout<<v[i];}cout<<'\n';}
template<class T> void outvv(T v){rep(i,v.size())outv(v[i]);}
template<class T> bool isin(T x,T l,T r){return (l)<=(x)&&(x)<=(r);}
template<class T> void yesno(T b){if(b)out("yes");else out("no");}
template<class T> void YesNo(T b){if(b)out("Yes");else out("No");}
template<class T> void YESNO(T b){if(b)out("YES");else out("NO");}
template<class T> void noyes(T b){if(b)out("no");else out("yes");}
template<class T> void NoYes(T b){if(b)out("No");else out("Yes");}
template<class T> void NOYES(T b){if(b)out("NO");else out("YES");}
void outs(ll a,ll b){if(a>=inf-100)out(b);else out(a);}
ll gcd(ll a,ll b){if(b==0)return a;return gcd(b,a%b);}
ll modpow(ll a,ll b){ll res=1;a%=mod;while(b){if(b&1)res=res*a%mod;a=a*a%mod;b>>=1;}return res;}

vvp g;
ll c,num;
vi id_ver,id_edge,lk,ord,tmp;
vb used,back_edge;
vi group;
void dfs(int i,int p){
    used[i]=true;
    group.pb(i);
    ord[i]=c++;
    lk[i]=ord[i];
    for(auto x:g[i]){
        if(x.fi!=p){
            if(ord[x.fi]<ord[i])tmp.pb(x.se);
            if(!used[x.fi]){
                dfs(x.fi,i);
                chmin(lk[i],lk[x.fi]);
                if(lk[x.fi]>=ord[i]){
                    while(true){
                        id_edge[tmp.back()]=num;
                        bool done=false;
                        if(tmp.back()==x.se)done=true;
                        tmp.pop_back();
                        if(done)break;
                    }
                    num++;
                }
            }
            else chmin(lk[i],ord[x.fi]);
        }
    }
}
vi f,sz,par;
vvi edge;
ll getsz(int i,int p){
    par[i]=p;
    if(i>=num)sz[i]=1;
    else sz[i]=f[i];
    for(ll x:edge[i])if(x!=p){
        sz[i]+=getsz(x,i);
    }
    return sz[i];
}
int main(){
    ll n,m,ans=0;cin>>n>>m;
    g=vvp(n);
    used=vb(n,false);
    lk=vi(n,inf);
    id_ver=vi(n,-2);
    id_edge=vi(m);
    back_edge=vb(m,false);
    ord=vi(n,-1);
    rep(i,m){
        ll a,b;cin>>a>>b;a--;b--;
        g[a].pb(b,i);g[b].pb(a,i);
    }
    rep(i,n){
        if(used[i])continue;
        tmp=vi(0);
        group=vi(0);
        c=0;num=0;
        ll cnt=0;
        dfs(i,-1);
        if(group.size()<3)continue;
        f=vi(num);
        for(auto j:group){
            bool b=false;
            ll t=id_edge[g[j][0].se];
            for(auto x:g[j]){
                if(t!=id_edge[x.se])b=true;
            }
            if(b){
                id_ver[j]=num+cnt;
                cnt++;
            }
            else{
                id_ver[j]=t;
                f[t]++;
            }
        }
        // outv(id_ver);outv(id_edge);
        edge=vvi(num+cnt);
        for(ll x:group){
            if(id_ver[x]>=num)for(auto to:g[x]){
                edge[id_ver[x]].pb(id_edge[to.se]);
                edge[id_edge[to.se]].pb(id_ver[x]);
            }
        }
        rep(j,cnt+num)dupli(edge[j]);
        par=vi(num+cnt);sz=vi(num+cnt);
        getsz(0,-1);
        vi s(num);
        rep(j,num){
            for(ll x:edge[j])if(x!=par[j])s[j]+=sz[x]*(sz[x]-1);
            ans+=f[j]*((group.size()-1)*(group.size()-2)-s[j]);
            if(par[j]!=-1)ans-=f[j]*(group.size()-sz[j])*(group.size()-sz[j]-1);
        }
        REP(j,num,num+cnt){
            ans+=(group.size()-1)*(group.size()-2);
            for(ll x:edge[j])if(x!=par[j])ans-=s[x];
            ll p=par[j];
            ans-=(s[p]+(group.size()-sz[p])*(group.size()-sz[p]-1)-sz[j]*(sz[j]-1));
        }
    }
    out(ans);
}
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB Output is correct
2 Correct 0 ms 256 KB Output is correct
3 Correct 1 ms 256 KB Output is correct
4 Correct 0 ms 256 KB Output is correct
5 Correct 0 ms 256 KB Output is correct
6 Correct 0 ms 256 KB Output is correct
7 Correct 1 ms 256 KB Output is correct
8 Correct 0 ms 384 KB Output is correct
9 Correct 0 ms 256 KB Output is correct
10 Correct 1 ms 256 KB Output is correct
11 Correct 0 ms 256 KB Output is correct
12 Incorrect 0 ms 256 KB Output isn't correct
13 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB Output is correct
2 Correct 0 ms 256 KB Output is correct
3 Correct 1 ms 256 KB Output is correct
4 Correct 0 ms 256 KB Output is correct
5 Correct 0 ms 256 KB Output is correct
6 Correct 0 ms 256 KB Output is correct
7 Correct 1 ms 256 KB Output is correct
8 Correct 0 ms 384 KB Output is correct
9 Correct 0 ms 256 KB Output is correct
10 Correct 1 ms 256 KB Output is correct
11 Correct 0 ms 256 KB Output is correct
12 Incorrect 0 ms 256 KB Output isn't correct
13 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 153 ms 21856 KB Output is correct
2 Correct 183 ms 21932 KB Output is correct
3 Correct 172 ms 25432 KB Output is correct
4 Correct 209 ms 23528 KB Output is correct
5 Correct 218 ms 20472 KB Output is correct
6 Correct 174 ms 26344 KB Output is correct
7 Correct 176 ms 18188 KB Output is correct
8 Correct 175 ms 21596 KB Output is correct
9 Correct 181 ms 15196 KB Output is correct
10 Correct 168 ms 16300 KB Output is correct
11 Correct 130 ms 11256 KB Output is correct
12 Correct 145 ms 11128 KB Output is correct
13 Correct 122 ms 10764 KB Output is correct
14 Correct 129 ms 10744 KB Output is correct
15 Correct 84 ms 9208 KB Output is correct
16 Correct 113 ms 9208 KB Output is correct
17 Correct 9 ms 5120 KB Output is correct
18 Correct 8 ms 5120 KB Output is correct
19 Correct 9 ms 4992 KB Output is correct
20 Correct 8 ms 4984 KB Output is correct
21 Correct 8 ms 4992 KB Output is correct
22 Correct 8 ms 4992 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 2 ms 512 KB Output is correct
2 Correct 2 ms 512 KB Output is correct
3 Correct 2 ms 512 KB Output is correct
4 Correct 2 ms 640 KB Output is correct
5 Correct 2 ms 640 KB Output is correct
6 Correct 2 ms 640 KB Output is correct
7 Correct 2 ms 640 KB Output is correct
8 Correct 2 ms 640 KB Output is correct
9 Correct 2 ms 640 KB Output is correct
10 Correct 2 ms 512 KB Output is correct
11 Correct 2 ms 512 KB Output is correct
12 Correct 2 ms 512 KB Output is correct
13 Correct 2 ms 512 KB Output is correct
14 Correct 2 ms 384 KB Output is correct
15 Correct 2 ms 384 KB Output is correct
16 Correct 1 ms 384 KB Output is correct
17 Correct 2 ms 512 KB Output is correct
18 Correct 2 ms 512 KB Output is correct
19 Correct 2 ms 512 KB Output is correct
20 Correct 1 ms 512 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 239 ms 25708 KB Output is correct
2 Correct 208 ms 25836 KB Output is correct
3 Correct 198 ms 25708 KB Output is correct
4 Correct 188 ms 25760 KB Output is correct
5 Correct 184 ms 25708 KB Output is correct
6 Correct 193 ms 38248 KB Output is correct
7 Correct 203 ms 31080 KB Output is correct
8 Correct 196 ms 29720 KB Output is correct
9 Correct 190 ms 28600 KB Output is correct
10 Correct 216 ms 21052 KB Output is correct
11 Correct 185 ms 23812 KB Output is correct
12 Correct 174 ms 16472 KB Output is correct
13 Correct 173 ms 15492 KB Output is correct
14 Correct 150 ms 11384 KB Output is correct
15 Correct 132 ms 10872 KB Output is correct
16 Correct 80 ms 8824 KB Output is correct
17 Correct 136 ms 21740 KB Output is correct
18 Correct 124 ms 21728 KB Output is correct
19 Correct 148 ms 22008 KB Output is correct
20 Correct 126 ms 21708 KB Output is correct
# 결과 실행 시간 메모리 Grader output
1 Correct 1 ms 512 KB Output is correct
2 Correct 2 ms 512 KB Output is correct
3 Incorrect 2 ms 512 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 181 ms 25988 KB Output is correct
2 Correct 178 ms 26404 KB Output is correct
3 Incorrect 217 ms 26092 KB Output isn't correct
4 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB Output is correct
2 Correct 0 ms 256 KB Output is correct
3 Correct 1 ms 256 KB Output is correct
4 Correct 0 ms 256 KB Output is correct
5 Correct 0 ms 256 KB Output is correct
6 Correct 0 ms 256 KB Output is correct
7 Correct 1 ms 256 KB Output is correct
8 Correct 0 ms 384 KB Output is correct
9 Correct 0 ms 256 KB Output is correct
10 Correct 1 ms 256 KB Output is correct
11 Correct 0 ms 256 KB Output is correct
12 Incorrect 0 ms 256 KB Output isn't correct
13 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Correct 0 ms 256 KB Output is correct
2 Correct 0 ms 256 KB Output is correct
3 Correct 1 ms 256 KB Output is correct
4 Correct 0 ms 256 KB Output is correct
5 Correct 0 ms 256 KB Output is correct
6 Correct 0 ms 256 KB Output is correct
7 Correct 1 ms 256 KB Output is correct
8 Correct 0 ms 384 KB Output is correct
9 Correct 0 ms 256 KB Output is correct
10 Correct 1 ms 256 KB Output is correct
11 Correct 0 ms 256 KB Output is correct
12 Incorrect 0 ms 256 KB Output isn't correct
13 Halted 0 ms 0 KB -