제출 #981467

#제출 시각아이디문제언어결과실행 시간메모리
981467phoenix0423철인 이종 경기 (APIO18_duathlon)C++17
71 / 100
97 ms32788 KiB
#include<bits/stdc++.h> using namespace std; typedef long long ll; typedef pair<ll, ll> pll; #define fastio ios::sync_with_stdio(false), cin.tie(0) #define pb push_back #define eb emplace_back #define f first #define s second #define int long long const int maxn = 2e5 + 5; vector<int> adj[maxn], nadj[maxn]; int in[maxn], low[maxn], sq[maxn], sz[maxn], dfn = 0, cnt = 0; int n, m, ans = 0; stack<int> st; void dfs(int pos){ // cout<<"dfs : "<<pos<<"\n"; in[pos] = low[pos] = ++dfn; st.push(pos); for(auto x : adj[pos]){ if(in[x]) low[pos] = min(low[pos], in[x]); else{ dfs(x); low[pos] = min(low[pos], low[x]); if(low[x] >= in[pos]){ int cur = n++; sq[cur] = 1, in[cur] = 1; while(low[st.top()] >= in[pos]){ if(st.top() == pos) break; nadj[cur].pb(st.top()); nadj[st.top()].pb(cur); st.pop(); } nadj[cur].pb(pos); nadj[pos].pb(cur); int sz = nadj[cur].size(); // cout<<"sz : "<<pos<<" "<<sz<<"\n"; // for(auto x : nadj[cur]) cout<<x<<" "; // cout<<"\n"; } } } // cout<<pos<<" "<<in[pos]<<" "<<low[pos]<<"\n"; } void dfs2(int pos, int prev){ sz[pos] = 1 - sq[pos]; for(auto x : nadj[pos]){ if(x == prev) continue; dfs2(x, pos); sz[pos] += sz[x]; } } void dfs3(int pos, int prev, int tsz){ // cout<<"d : "<<tsz<<" "<<pos<<" "<<sz[pos]<<"\n"; // cout<<"sz : "<<pos<<" "<<sz[pos]<<"\n"; if(!sq[pos]){ ans += (tsz - 1) * (tsz - 1); ans -= (tsz - sz[pos]) * (tsz - sz[pos]); for(auto x : nadj[pos]){ if(x == prev) continue; ans -= sz[x] * sz[x]; } } else if(nadj[pos].size() >= 3){ // cout<<"do : "<<tsz<<"\n"; int lft = tsz - sz[pos], mid = nadj[pos].size() - 2; int cur = tsz * tsz * mid; // cout<<"add : "<<tsz<<" * "<<tsz<<"\n"; cur -= lft * lft * mid; // cout<<"ded : "<<lft<<" * "<<lft<<"\n"; // ans -= lft * (lft - 1) * (tsz - lft); for(auto x : nadj[pos]){ if(x == prev) continue; cur -= sz[x] * sz[x] * mid; // ans -= sz[x] * (sz[x] - 1) * (tsz - sz[x]); } ans += cur; } for(auto x : nadj[pos]){ if(x == prev) continue; dfs3(x, pos, tsz); } } signed main(void){ fastio; cin>>n>>m; for(int i = 0; i < m; i++){ int a, b; cin>>a>>b; a--, b--; adj[a].pb(b); adj[b].pb(a); } for(int i = 0; i < n; i++){ if(!in[i]){ dfs(i); dfs2(i, -1); dfs3(i, -1, sz[i]); } } cout<<ans<<"\n"; }

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

count_triplets.cpp: In function 'void dfs(long long int)':
count_triplets.cpp:37:21: warning: unused variable 'sz' [-Wunused-variable]
   37 |                 int sz = nadj[cur].size();
      |                     ^~
#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...