Submission #659420

#TimeUsernameProblemLanguageResultExecution timeMemory
659420activedeltorreDuathlon (APIO18_duathlon)C++14
0 / 100
144 ms31056 KiB
#include <iostream> #include <vector> #include <algorithm> using namespace std; long long sef[100005]; long long sz[100005]; long long fre[100005]; long long lvl[100005]; long long best[100005]; long long parent[100005]; vector<pair<long long,long long> >adj[100005]; vector<long long>adi[100005]; long long find (long long u) { if(sef[u]==u) { return u; } return sef[u]=find(sef[u]); } long long merge (long long a,long long b) { a=find(a); b=find(b); if(a!=b) { if(sz[a]<sz[b]) { swap(a,b); } sef[b]=a; sz[a]=sz[a]+sz[b]; sz[b]=0; return 1; } return 0; } struct str { long long a,b,poz,folos=0; }; str edges[200005]; long long numarconex[100005]; long long numar=0; vector<int>vec; void dfs(long long curr,long long par) { vec.push_back(curr); parent[curr]=par; lvl[curr]=lvl[par]+1; fre[curr]=1; best[curr]=lvl[curr]; numar++; long long i,k; for(i=0;i<adj[curr].size();i++) { k=adj[curr][i].first; if(fre[k]==0) { edges[adj[curr][i].second].folos=1; dfs(k,curr); } else if(k!=par) { best[curr]=min(best[curr],lvl[k]); } } } bool cmp(long long a,long long b) { return lvl[a]>lvl[b]; } long long v[100005]; long long suma=0; long long subtree[100005]; long long n; void dfs2(long long curr,long long parent) { long long i,k,rest; for(i=0;i<adi[curr].size();i++) { k=adi[curr][i]; if(k!=parent) { dfs2(k,curr); subtree[k]=subtree[k]+sz[k]; subtree[curr]=subtree[curr]+subtree[k]; suma=suma+(sz[curr]-1)*(sz[curr]-1)*subtree[k]; } } // for(i=0;i<special) rest=numarconex[curr]-subtree[curr]-sz[curr]; suma=suma+sz[curr]*(sz[curr]-1)*(sz[curr]-2)/2; suma=suma+(sz[curr]-1)*(sz[curr]-1)*(rest); //suma=suma+sz[curr]*(sz[curr]-1)*(subtree[curr])*2; suma=suma+sz[curr]*(subtree[curr])*(rest); } int capitan[100005]; int main() { long long i,j,k,l,a,b,m; cin>>n>>m; for(i=1;i<=n;i++) { sef[i]=i; sz[i]=1; } for(i=1;i<=m;i++) { cin>>edges[i].a>>edges[i].b; edges[i].poz=i; edges[i].folos=0; adj[edges[i].a].push_back({edges[i].b,i}); adj[edges[i].b].push_back({edges[i].a,i}); } for(i=1;i<=n;i++) { if(fre[i]==0) { numar=0; vec.clear(); dfs(i,0); capitan[i]=1; for(j=0;j<vec.size();j++) { numarconex[vec[j]]=numar; } } } int cnt=0; for(i=1;i<=n;i++) { if(fre[i]==0) { cnt++; } } if(cnt!=0) { cout<<2/0; } for(i=1;i<=n;i++) { v[i]=i; } sort(v+1,v+n+1,cmp); for(i=1;i<n;i++) { if(best[v[i]]<=lvl[v[i]]-1) { best[parent[v[i]]]=min(best[v[i]],best[parent[v[i]]]); merge(v[i],parent[v[i]]); } } for(i=1;i<n;i++) { a=find(v[i]); b=find(parent[v[i]]); if(a!=b) { adi[a].push_back(b); adi[b].push_back(a); } } for(i=1;i<=n;i++) { } for(i=1;i<=n;i++) { if(capitan[i]==1) { dfs2(find(i),0); } } cout<<suma*2; return 0; }

Compilation message (stderr)

count_triplets.cpp: In function 'void dfs(long long int, long long int)':
count_triplets.cpp:56:14: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<std::pair<long long int, long long int> >::size_type' {aka 'long unsigned int'} [-Wsign-compare]
   56 |     for(i=0;i<adj[curr].size();i++)
      |             ~^~~~~~~~~~~~~~~~~
count_triplets.cpp: In function 'void dfs2(long long int, long long int)':
count_triplets.cpp:81: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]
   81 |     for(i=0;i<adi[curr].size();i++)
      |             ~^~~~~~~~~~~~~~~~~
count_triplets.cpp: In function 'int main()':
count_triplets.cpp:125:22: warning: comparison of integer expressions of different signedness: 'long long int' and 'std::vector<int>::size_type' {aka 'long unsigned int'} [-Wsign-compare]
  125 |             for(j=0;j<vec.size();j++)
      |                     ~^~~~~~~~~~~
count_triplets.cpp:141:16: warning: division by zero [-Wdiv-by-zero]
  141 |         cout<<2/0;
      |               ~^~
count_triplets.cpp:102:19: warning: unused variable 'k' [-Wunused-variable]
  102 |     long long i,j,k,l,a,b,m;
      |                   ^
count_triplets.cpp:102:21: warning: unused variable 'l' [-Wunused-variable]
  102 |     long long i,j,k,l,a,b,m;
      |                     ^
#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...