제출 #159034

#제출 시각아이디문제언어결과실행 시간메모리
159034arnold518철인 이종 경기 (APIO18_duathlon)C++14
100 / 100
246 ms38392 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<int, int> pii; typedef pair<ll, ll> pll; const int MAXN = 2e5; int N, M; vector<int> adj[MAXN+10]; int idx[MAXN+10], low[MAXN+10], cnt, S; ll ans; void dfs(int now, int bef) { S++; idx[now]=low[now]=++cnt; for(auto nxt : adj[now]) { if(nxt==bef) continue; if(!idx[nxt]) { dfs(nxt, now); low[now]=min(low[now], low[nxt]); } else { low[now]=min(low[now], idx[nxt]); } } } bool vis[MAXN+10]; int sz[MAXN+10]; vector<int> bcc[MAXN+10], adj2[MAXN+10]; int ccnt; void color(int now, int col) { vis[now]=true; if(col) { bcc[now].push_back(col); adj2[now].push_back(col); adj2[col].push_back(now); } for(int nxt : adj[now]) { if(vis[nxt]) continue; if(idx[now]<=low[nxt]) { ccnt++; bcc[now].push_back(ccnt); adj2[now].push_back(ccnt); adj2[ccnt].push_back(now); color(nxt, ccnt); } else { color(nxt, col); } } } void calc(int now, int bef) { if(now<=N) sz[now]=1; for(auto nxt : adj2[now]) { if(nxt==bef) continue; calc(nxt, now); sz[now]+=sz[nxt]; } if(now>N) { for(auto nxt : adj2[now]) { if(nxt!=bef) ans-=(ll)sz[nxt]*(sz[nxt]-1)*(adj2[now].size()-1); else ans-=(ll)(S-sz[now])*(S-sz[now]-1)*(adj2[now].size()-1); } } } int main() { int i, j; scanf("%d%d", &N, &M); for(i=1; i<=M; i++) { int u, v; scanf("%d%d", &u, &v); adj[u].push_back(v); adj[v].push_back(u); } ccnt=N; for(i=1; i<=N; i++) { if(vis[i]) continue; S=0; dfs(i, i); color(i, 0); ans+=(ll)S*(S-1)*(S-2); calc(i, i); } printf("%lld", ans); }

컴파일 시 표준 에러 (stderr) 메시지

count_triplets.cpp: In function 'int main()':
count_triplets.cpp:89:12: warning: unused variable 'j' [-Wunused-variable]
     int i, j;
            ^
count_triplets.cpp:91: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:95: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 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...