Submission #133662

#TimeUsernameProblemLanguageResultExecution timeMemory
133662ckodserTowns (IOI15_towns)C++14
25 / 100
24 ms1100 KiB
#include "towns.h" #include<bits/stdc++.h> #define ll long long #define pb push_back #define ld long double #define mp make_pair #define F first #define S second #define pii pair<ll,ll> using namespace :: std; const ll maxn=700; const ll inf=1e9+900; ll fasta0[maxn]; ll sub,gn; vector<pii> ger[maxn]; void addYal(ll a,ll b,ll w){ ger[a].pb(mp(b,w)); ger[b].pb(mp(a,w)); } ll findFar(ll a,ll p=-1){ ll ans=0; for(auto e:ger[a]){ if(e.F!=p){ ans=max(ans,findFar(e.F,a)+e.S); } } return ans; } ll findSubTree(ll a,ll p=-1){ ll ans=(a<gn); for(auto e:ger[a]){ if(e.F!=p){ ans+=findSubTree(e.F,a); } } return ans; } bool isBAD(ll v){ for(auto e:ger[v]){ ll sz=findSubTree(e.F,v); if(sz>gn/2){ return 1; } } return 0; } pair<vector<ll> ,ll> shoa(ll n){ ll ans=inf; vector<ll> vec; for(ll i=0;i<n;i++){ ll r=findFar(i); if(r<ans){ vec.clear(); ans=r; } if(r==ans){ vec.pb(i); } } return mp(vec,ans); } int hubDistance(int n, int Sub) { gn=n; sub=Sub; memset(fasta0,0,sizeof fasta0); for(ll i=0;i<maxn;i++){ ger[i].clear(); } pii far=mp(0,0); for(ll i=1;i<n;i++){ fasta0[i]=getDistance(0,i); far=max(far,mp(fasta0[i],i)); } ll v=far.S; ll u=0; ll w=far.F; vector<pair<ll,pii> > vec; vector<ll> comp; for(ll i=1;i<n;i++){ if(i!=v && i!=u){ ll a=getDistance(v,i); ll b=getDistance(u,i); ll s123=(a+b+w)/2; ll s1=s123-a; ll s2=s123-b; ll s3=s123-w; vec.pb(mp(i,mp(s1,s3))); comp.pb(s1); } } sort(comp.begin(),comp.end()); comp.resize(unique(comp.begin(),comp.end())-comp.begin()); addYal(u,n,comp[0]); for(ll i=0;i+1<comp.size();i++){ addYal(n+i,n+i+1,comp[i+1]-comp[i]); } addYal(n+comp.size()-1,v,w-comp.back()); for(auto e:vec){ ll u=lower_bound(comp.begin(),comp.end(),e.S.F)-comp.begin(); addYal(e.F,n+u,e.S.S); } pair<vector<ll> ,ll> eee=shoa(n+comp.size()); ll r=eee.S; if(sub<=2){ return r; } vector<ll> ves; for(auto v:eee.F){ if(!isBAD(v)){ ves.pb(v); } } if(ves.size()==0){ return -r; } if(ves.size()>1){ exit(1); } return r; }

Compilation message (stderr)

towns.cpp: In function 'int hubDistance(int, int)':
towns.cpp:80:27: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
  fasta0[i]=getDistance(0,i);
                           ^
towns.cpp:90:26: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
      ll a=getDistance(v,i);
                          ^
towns.cpp:90:26: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
towns.cpp:91:26: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
      ll b=getDistance(u,i);
                          ^
towns.cpp:91:26: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
towns.cpp:94:9: warning: unused variable 's2' [-Wunused-variable]
      ll s2=s123-b;
         ^~
towns.cpp:103:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(ll i=0;i+1<comp.size();i++){
                ~~~^~~~~~~~~~~~
towns.cpp:108:5: warning: declaration of 'u' shadows a previous local [-Wshadow]
  ll u=lower_bound(comp.begin(),comp.end(),e.S.F)-comp.begin();
     ^
towns.cpp:84:8: note: shadowed declaration is here
     ll u=0;
        ^
towns.cpp:114:9: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
  return r;
         ^
towns.cpp:117:14: warning: declaration of 'v' shadows a previous local [-Wshadow]
     for(auto v:eee.F){
              ^
towns.cpp:83:8: note: shadowed declaration is here
     ll v=far.S;
        ^
towns.cpp:123:9: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
  return -r;
         ^~
towns.cpp:128:12: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
     return r;
            ^
#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...