Submission #747724

#TimeUsernameProblemLanguageResultExecution timeMemory
7477241075508020060209tc철인 이종 경기 (APIO18_duathlon)C++14
23 / 100
154 ms47180 KiB
#include <bits/stdc++.h> using namespace std; #define int long long int n;int m; vector<int>e[300005]; vector<int>tr[300005]; vector<int>bke[300005]; vector<int>dwe[300005]; int sz[300005];int vis[300005];int dph[300005];int fa[300005]; int ans; void fdfs(int nw){ vis[nw]=1; sz[nw]=1; for(int i=0;i<e[nw].size();i++){ int v=e[nw][i]; if(vis[v]==0){ fa[v]=nw; dph[v]=dph[nw]+1; tr[nw].push_back(v); fdfs(v); sz[nw]+=sz[v]; continue; } if(v==fa[nw]){continue;} if(dph[v]<dph[nw]){ bke[nw].push_back(v); dwe[v].push_back(nw); } } } void dfs1(int nw,int rtsz){ ans+=(rtsz-sz[nw])*(sz[nw]-1); for(int i=0;i<tr[nw].size();i++){ int v=tr[nw][i]; dfs1(v,rtsz); ans+=sz[v]*(rtsz-1-sz[v]); } } int bv; int dfs2(int nw,int rtsz){ int ret=0; for(int i=0;i<tr[nw].size();i++){ int v=tr[nw][i]; int vl=dfs2(v,rtsz); if(vl){ ret=vl; ans+=(sz[v]-vl)*2; } } if(bke[nw].size()){ ret=sz[nw]; bv=bke[nw][0]; } if(dwe[nw].size()){ ret=0; } if(ret){ ans+=(rtsz-sz[bv]+1)*(dph[nw]-dph[bv]-1)*2; } //cout<<nw<<" "<<ret<<endl; return ret; } signed main() { cin>>n>>m; for(int i=1;i<=m;i++){ int a;int b; cin>>a>>b; e[a].push_back(b); e[b].push_back(a); } ans=0; vector<int>rt; for(int i=1;i<=n;i++){ if(vis[i]==0){ rt.push_back(i); fdfs(i); } } for(int i=0;i<rt.size();i++){ dfs1(rt[i],sz[rt[i]]); dfs2(rt[i],sz[rt[i]]); } cout<<ans<<endl; }

Compilation message (stderr)

count_triplets.cpp: In function 'void fdfs(long long int)':
count_triplets.cpp:17:14: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   17 | for(int i=0;i<e[nw].size();i++){
      |             ~^~~~~~~~~~~~~
count_triplets.cpp: In function 'void dfs1(long long int, long long int)':
count_triplets.cpp:38:14: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   38 | for(int i=0;i<tr[nw].size();i++){
      |             ~^~~~~~~~~~~~~~
count_triplets.cpp: In function 'long long int dfs2(long long int, long long int)':
count_triplets.cpp:48:14: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   48 | for(int i=0;i<tr[nw].size();i++){
      |             ~^~~~~~~~~~~~~~
count_triplets.cpp: In function 'int main()':
count_triplets.cpp:92:18: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<long long int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   92 |     for(int i=0;i<rt.size();i++){
      |                 ~^~~~~~~~~~
#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...