Submission #133658

#TimeUsernameProblemLanguageResultExecution timeMemory
133658ckodserTowns (IOI15_towns)C++14
0 / 100
23 ms504 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 mx[maxn];
ll cnt[maxn];
ll sub;
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 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);
	}
    }
    if(vec.size()>1){
	exit(1);
    }
    return ans;
}
int hubDistance(int n, int Sub) {
    sub=Sub;
    memset(fasta0,0,sizeof fasta0);
    memset(mx,0,sizeof mx);
    memset(cnt,0,sizeof cnt);
    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);
    }
    ll r=shoa(n+comp.size());
    return r;
}

Compilation message (stderr)

towns.cpp: In function 'int hubDistance(int, int)':
towns.cpp:64:27: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
  fasta0[i]=getDistance(0,i);
                           ^
towns.cpp:74:26: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
      ll a=getDistance(v,i);
                          ^
towns.cpp:74:26: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
towns.cpp:75:26: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
      ll b=getDistance(u,i);
                          ^
towns.cpp:75:26: warning: conversion to 'int' from 'long long int' may alter its value [-Wconversion]
towns.cpp:78:9: warning: unused variable 's2' [-Wunused-variable]
      ll s2=s123-b;
         ^~
towns.cpp:87:19: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
     for(ll i=0;i+1<comp.size();i++){
                ~~~^~~~~~~~~~~~
towns.cpp:92: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:68:8: note: shadowed declaration is here
     ll u=0;
        ^
towns.cpp:96: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...