제출 #341434

#제출 시각아이디문제언어결과실행 시간메모리
341434beksultan04관광지 (IZhO14_shymbulak)C++14
50 / 100
1590 ms59552 KiB
#include <bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> #define OK puts("OK"); #define NO puts("NO"); #define YES puts("YES"); #define fr first #define sc second #define ret return #define scanl(a) scanf("%lld",&a); #define scanll(a,b) scanf("%lld %lld",&a, &b); #define scanlll(a,b,c) scanf("%lld %lld %lld",&a,&b,&c); #define scan1(a) scanf("%d",&a); #define scan2(a,b) scanf("%d %d",&a, &b); #define scan3(a,b,c) scanf("%d %d %d",&a,&b,&c); #define all(s) s.begin(),s.end() #define allr(s) s.rbegin(),s.rend() #define pb push_back #define sz(v) (int)v.size() #define endi puts(""); #define eps 1e-12 const int N = 2e6+12,INF=1e9+7; vector <int> g[N],cycle,v; pii ver[N]; bool bosh[N],vis[N]; void dfs_cycle(int x,int p){ vis[x] = 1; int i,j; v.pb(x); for (i=0;i<g[x].size();++i){ int to = g[x][i]; if (vis[to] == 1 && to != p){ bool f=0; for (j=0;j<v.size();++j){ if (v[j] == to)f=1; if (f){ cycle.pb(v[j]); } } } if (vis[to] == 0){ dfs_cycle(to,x); } } v.pop_back(); } int dlina[N],colichestvo[N]; int ans,cont; void dfs_diametr(int x,int p){ int i; vector <pii> tmp; for (i=0;i<g[x].size();++i){ if (g[x][i] == p || bosh[g[x][i]])continue; dfs_diametr(g[x][i],x); tmp.pb({dlina[g[x][i]],colichestvo[g[x][i]]}); } if (tmp.size() == 0){ colichestvo[x] = 1; ret; } sort(allr(tmp)); int mx = tmp[0].fr,cnt = tmp[0].sc; for (i=1;i<tmp.size();++i){ if (tmp[i].fr == mx){ cnt += tmp[i].sc; } } dlina[x] = mx+1; colichestvo[x] = cnt; } void calc(int x,int y,int m){ int dist = min(abs(x-y),m-abs(x-y)); dist += dlina[cycle[x]]; dist += dlina[cycle[y]]; if (ans < dist){ ans = dist; cont=0; } if (dist == ans){ if (abs(x-y) == (m-abs(x-y))){ cont += max(colichestvo[cycle[x]],1ll)*max(1ll,colichestvo[cycle[y]])*2ll; } else cont += colichestvo[cycle[x]]*colichestvo[cycle[y]]*1ll; } } void posledniy_dfs(int x,int p){ vector <pii> tmp; int i; for (i=0;i<g[x].size();++i){ if (g[x][i] == p || bosh[g[x][i]])continue; posledniy_dfs(g[x][i],x); tmp.pb({dlina[g[x][i]],colichestvo[g[x][i]]}); } if (tmp.size() <2)ret; sort(allr(tmp)); if (tmp.empty())ret; vector <int> xixi; int mx = tmp[0].fr+1,cnt=tmp[0].sc,f=0; if (mx == tmp[1].fr+1){ xixi.pb(cnt); int sum=0,bla=0; for (i=1;i<tmp.size();++i){ if (tmp[i].fr+1+mx > ans){ ans = tmp[i].fr+1+mx; f=2; } if (ans == tmp[i].fr+1+mx){ xixi.pb(tmp[i].sc); f = max(f,1ll); } else break; } for (i=0;i<xixi.size();++i){ sum+=xixi[i]; bla += xixi[i]*xixi[i]; } sum *= sum; sum-=bla; sum/=2; if (f==2)cont=sum; else if (f==1){ cont+=sum; } } else { int sum=0,bla=0; for (i=1;i<tmp.size();++i){ if (tmp[i].fr+1+mx > ans){ ans = tmp[i].fr+1+mx; f=2; } if (ans == tmp[i].fr+1+mx){ xixi.pb(tmp[i].sc); sum += cnt*tmp[i].sc; f = max(f,1ll); } else break; } if (f==2)cont=sum; else if (f==1){ cont+=sum; } } } main(){ int n,i,j; cin>>n; for (i=1;i<=n;++i){ int x,y; cin>>x>>y; g[x].pb(y); g[y].pb(x); } dfs_cycle(1,0); int m = cycle.size(); if (m == n){ cout <<n; ret 0; } for (i=0;i<m;++i) bosh[cycle[i]] = 1; for (i=0;i<m;++i){ dfs_diametr(cycle[i],0); // cout <<cycle[i]<<"-"<<dlina[cycle[i]]<<" "; // cout <<colichestvo[cycle[i]]<<"\n"; } for (i=0;i<m;++i){ for (j=i+1;j<m;++j){ calc(i,j,m); } } for (i=0;i<m;++i){ posledniy_dfs(cycle[i],0); } cout <<cont; } /* 16 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 6 10 10 11 10 12 5 13 2 14 2 15 15 16 7 1 10 1 2 2 3 3 4 4 7 3 5 3 8 5 6 8 9 9 10 3 1 */

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

shymbulak.cpp: In function 'void dfs_cycle(long long int, long long int)':
shymbulak.cpp:32:15: 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]
   32 |     for (i=0;i<g[x].size();++i){
      |              ~^~~~~~~~~~~~
shymbulak.cpp:36:23: 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]
   36 |             for (j=0;j<v.size();++j){
      |                      ~^~~~~~~~~
shymbulak.cpp: In function 'void dfs_diametr(long long int, long long int)':
shymbulak.cpp:58:15: 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]
   58 |     for (i=0;i<g[x].size();++i){
      |              ~^~~~~~~~~~~~
shymbulak.cpp:69:15: 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]
   69 |     for (i=1;i<tmp.size();++i){
      |              ~^~~~~~~~~~~
shymbulak.cpp: In function 'void posledniy_dfs(long long int, long long int)':
shymbulak.cpp:99:15: 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]
   99 |     for (i=0;i<g[x].size();++i){
      |              ~^~~~~~~~~~~~
shymbulak.cpp:112:19: 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]
  112 |         for (i=1;i<tmp.size();++i){
      |                  ~^~~~~~~~~~~
shymbulak.cpp:123: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]
  123 |         for (i=0;i<xixi.size();++i){
      |                  ~^~~~~~~~~~~~
shymbulak.cpp:138:19: 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]
  138 |         for (i=1;i<tmp.size();++i){
      |                  ~^~~~~~~~~~~
shymbulak.cpp:136:19: warning: unused variable 'bla' [-Wunused-variable]
  136 |         int sum=0,bla=0;
      |                   ^~~
shymbulak.cpp: At global scope:
shymbulak.cpp:158:6: warning: ISO C++ forbids declaration of 'main' with no type [-Wreturn-type]
  158 | main(){
      |      ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...