제출 #111605

#제출 시각아이디문제언어결과실행 시간메모리
111605sealnot123철인 이종 경기 (APIO18_duathlon)C++14
23 / 100
200 ms39380 KiB
#include<bits/stdc++.h> #define x first #define y second #define pb push_back #define ep emplace_back #define sz(a) (int)(a).size() using namespace std; typedef long long LL; typedef pair<LL,LL> PII; const int N=100050; vector< vector<int> > comp; // bridge tree vector<int> g[N],G[N],sta; int t,art[N],visited[N],lowlink[N],mk[N],ncomp[N]; LL dp[2][N],ans=0; void dfs(int u, int p){ visited[u] = lowlink[u] = ++t; sta.pb(u); for(int e : g[u]){ if(e==p) continue; if(!visited[e]){ dfs(e, u); lowlink[u] = min(lowlink[u], lowlink[e]); }else{ lowlink[u] = min(lowlink[u], visited[e]); } } if(lowlink[u] == visited[u]){ int nw = comp.size(); comp.pb({u}); ncomp[u]=nw; while(sta.back()!=u){ comp.back().pb(sta.back()); ncomp[sta.back()]=nw; sta.pop_back(); } sta.pop_back(); } } void DFS(int u, int p){ LL S = sz(comp[u]); for(int e : G[u]){ if(e==p) continue; DFS(e,u); ans += dp[0][e]*dp[1][u]; ans += dp[1][e]*dp[0][u]; dp[0][u] += dp[0][e]; dp[1][u] += dp[1][e] + dp[0][e]*S; ans += dp[0][e]*(S-1)*(S-1); ans += dp[1][e]*S; } dp[0][u] += S; dp[1][u] += (S-1)*(S-1); // printf("%lld %lld %lld %lld===\n",ans,S,dp[0][u],dp[1][u]); } int main(){ // freopen("104","r",stdin); // freopen("104.sol","w",stdout); int n,m,i,j,a,b; scanf(" %d %d",&n,&m); for(i=1;i<=m;i++){ scanf(" %d %d",&a,&b); g[a].pb(b); g[b].pb(a); } dfs(1,1); for(i=1;i<=n;i++){ if(!visited[i]) dfs(i,i); } for(i=0;i<sz(comp);i++){ // printf("#%d: ",i); for(int u : comp[i]){ // printf("%d ",u); for(int e : g[u]){ if(ncomp[e]!=i) mk[ncomp[e]]=1; } } for(int u : comp[i]){ for(int e : g[u]){ if(mk[ncomp[e]]) G[i].pb(ncomp[e]),mk[ncomp[e]]=0; } } // printf("\n"); } for(i=1;i<=n;i++){ if(!dp[0][i]) DFS(i,i); } ans<<=1; for(i=0;i<sz(comp);i++){ LL S = sz(comp[i]); ans += S*(S-1)*(S-2); } printf("%lld",ans); return 0; } /* 4 3 1 2 2 3 3 4 4 4 1 2 2 3 3 4 4 2 */

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

count_triplets.cpp: In function 'int main()':
count_triplets.cpp:58:15: warning: unused variable 'j' [-Wunused-variable]
     int n,m,i,j,a,b;
               ^
count_triplets.cpp:59: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:61:14: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
         scanf(" %d %d",&a,&b);
         ~~~~~^~~~~~~~~~~~~~~~
#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...