Submission #982308

#TimeUsernameProblemLanguageResultExecution timeMemory
982308Faisal_SaqibDuathlon (APIO18_duathlon)C++17
0 / 100
1089 ms72904 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define ll long long const int N=1e5+10; vector<int> ma[N]; // ll pre[N]; bool vis[N]; ll ans=0,sz[N],dp[N],dp_[N]; void dfs(int x,int p=-1) { sz[x]=1; vis[x]=1; for(auto y:ma[x]) { if(y!=p) { dfs(y,x); sz[x]+=sz[y]; dp[x]-=(sz[y]*sz[y]); } } dp[x]+=((sz[x]-1)*(sz[x]-1)); } void ChangeRoot(int x,int y) { // dp[x]+=(sz[y]*sz[y]); dp[x]-=((sz[x]-1)*(sz[x]-1)); dp[y]-=((sz[y]-1)*(sz[y]-1)); sz[x]-=sz[y]; sz[y]+=sz[x]; dp[x]+=((sz[x]-1)*(sz[x]-1)); dp[y]+=((sz[y]-1)*(sz[y]-1)); dp[y]-=(sz[x]*sz[x]); } void dfs_(int x,int p=-1) { vis[x]=1; ans+=dp[x]; for(auto y:ma[x]) { if(y!=p) { ChangeRoot(x,y); dfs_(y,x); ChangeRoot(y,x); } } } bool cycle=0; int nodes=0; void _dfs(int x,int p=-1) { vis[x]=1; nodes++; for(auto y:ma[x]) { if(y!=p) { if(vis[y]) { cycle=1; } else { _dfs(y,x); } } } } int f_cyc(int x) { return (x*(x-1)*(x-2)); } // int f_lin(int x) // { // ll cur=(x-1)*(x-1)*(x-1); // return cur-(pre[x-1]); // } int f_lin_brute(int x) { ll ans=0; ll sp=(x-1)*(x-1); for(int j=1;j<=x;j++) ans+=(sp-((j-1)*(j-1))-((x-j)*(x-j))); return ans; } set<int> senpai; vector<int> path; ll make_one(ll&a,ll&b,ll&c) { return (a+(11*(b+(11*c)))); } void full(int x) { vis[x]=1; for(auto y:ma[x]) { if(!vis[y]) { path.push_back(y); full(y); path.pop_back(); } } for(int j=1;(j+1)<path.size();j++) senpai.insert(make_one(path[0],path[j],path.back())); vis[x]=0; } void solve() { // int n,m; // cin>>n; // // m=n-1; int n,m; cin>>n>>m; vector<int> deg(n+2); for(int i=0;i<m;i++) { int x=i+1,y=i+2; cin>>x>>y; deg[x]++; deg[y]++; ma[x].push_back(y); ma[y].push_back(x); } for(int i=1;i<=n;i++) { path.push_back(i); full(i); path.pop_back(); } ans=senpai.size(); // int mx=0; // for(int i=1;i<=n;i++) // mx=max(mx,deg[i]); // if(n<=10) // { // // return; // } // else if(mx<=2) // { // // Solve a Cycle or a Path // for(int i=1;i<=n;i++) // { // if(!vis[i]) // { // cycle=0; // nodes=0; // _dfs(i); // if(cycle) // { // ans+=f_cyc(nodes); // } // else // { // ans+=f_lin_brute(nodes); // } // } // } // } // else // { // // Solve on Tree // for(int i=1;i<=n;i++) // { // if(!vis[i]) // { // dfs(i); // } // } // for(int i=1;i<=n;i++) // vis[i]=0; // for(int i=1;i<=n;i++) // { // if(!vis[i]) // { // dfs_(i); // } // } // } cout<<ans<<endl; } signed main() { cin.tie(0); cout.tie(0); ios::sync_with_stdio(0); // pre[0]=0; // ll asp=1e5+1; // for(int i=1;i<=asp;i++) // pre[i]=pre[i-1]+(i*i); solve(); }

Compilation message (stderr)

count_triplets.cpp: In function 'void full(long long int)':
count_triplets.cpp:107:19: 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]
  107 |  for(int j=1;(j+1)<path.size();j++)
      |              ~~~~~^~~~~~~~~~~~
#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...