제출 #744558

#제출 시각아이디문제언어결과실행 시간메모리
744558AbitoDuathlon (APIO18_duathlon)C++14
23 / 100
1064 ms1048576 KiB
#include <bits/stdc++.h> #define pb push_back #define F first #define S second #define endl '\n' #define ep insert #define pow pwr #define sqrt sqrtt #define elif else if #define y1 YONE #define int long long #define ppb pop_back using namespace std; const int N=1e6+5; int n,m,sz[N],par[N],dpar[N],dsz[N]; vector<int> adj[N],q; set<int> s[N]; bool vis[N]; int getpar(int x){ if (x==dpar[x]) return x; return dpar[x]=getpar(dpar[x]); } void link(int x,int y){ x=getpar(x);y=getpar(y); if (x==y) return; if (dsz[x]>dsz[y]) swap(x,y); dpar[x]=y; dsz[y]+=dsz[x]; return; } int getsize(int node,int p){ par[node]=p; sz[node]=1; for (auto u:adj[node]){ if (u==p) continue; sz[node]+=getsize(u,node); }return sz[node]; } void bfs(int node){ q.clear(); q.pb(node); par[node]=node; for (int i=0;i<q.size();i++){ int node=q[i]; for (auto u:adj[node]){ if (par[u]) continue; q.pb(u); par[u]=node; } }return; } int32_t main(){ //ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL); cin>>n>>m; if (n<=11){ for (int i=1;i<=m;i++){ int x,y; cin>>x>>y; adj[x].pb(y); adj[y].pb(x); } int ans=0; for (int i=1;i<=n;i++){ for (int j=1;j<=n;j++){ par[j]=0; s[j].clear(); s[j].ep(j); } bfs(i); reverse(q.begin(),q.end()); for (int i=0;i<q.size();i++){ for (auto u:s[q[i]]) s[par[q[i]]].ep(u); } for (auto x:adj[i]){ for (auto y:adj[i]){ int f=s[x].size(),g=s[y].size(); if (s[x].size()<s[y].size()){ for (auto d:s[x]){ if (s[y].count(d)) {f--;g--;} } } else{ for (auto d:s[y]){ if (s[x].count(d)) {f--;g--;} } }ans+=f*g; } } }cout<<ans<<endl; return 0; } for (int i=1;i<=n;i++){ dsz[i]=1; dpar[i]=i; } for (int i=1;i<=m;i++){ int x,y; cin>>x>>y; adj[x].pb(y); adj[y].pb(x); link(x,y); } for (int i=1;i<=n;i++){ if (sz[i]) continue; getsize(i,0); } int ans=0; for (int i=1;i<=n;i++){ int x=sz[i]-1; for (auto u:adj[i]){ if (u==par[i]) continue; x-=sz[u]; ans+=x*sz[u]; }ans+=(dsz[getpar(i)]-sz[i])*(sz[i]-1); } cout<<ans*2LL<<endl; return 0; }

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

count_triplets.cpp: In function 'void bfs(long long int)':
count_triplets.cpp:43: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]
   43 |     for (int i=0;i<q.size();i++){
      |                  ~^~~~~~~~~
count_triplets.cpp: In function 'int32_t main()':
count_triplets.cpp:71:27: 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]
   71 |             for (int i=0;i<q.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...