Submission #26777

# Submission time Handle Problem Language Result Execution time Memory
26777 2017-07-05T14:10:55 Z repeating Race (IOI11_race) C++11
0 / 100
10 ms 8952 KB
#include <bits/stdc++.h>
#include "race.h"
#define F first
#define S second
#define P push
#define pb push_back
#define MEM(dp,i) memset(dp,i,sizeof(dp))
#define W while
#define R return
#define C continue
#define SI size()
#define ll long long
#define ld long double
#define pll pair<ll,ll>
#define pii pair<int,int>
#define SF(x) scanf("%I64d",&x)
#define SF2(x,y) scanf("%I64d%I64d",&x,&y)
#define SF3(x,y,z) scanf("%I64d%I64d%I64d",&x,&y,&z)
#define SF4(x,y,z,o) scanf("%I64d%I64d%I64d%I64d",&x,&y,&z,&o)
#define all(v) v.begin(),v.end()
using namespace std;
const long long INF = 1e9+5e8;
int n,k;
vector<pii> adj[200105];
vector<int> v,vec;
bool blocked[200105];
int sub[200105];
int par[200105];
int t[1000105];
pii dis[200105];

int DFS(int ver){
    v.pb(ver);
    int &ret=sub[ver];
    ret=1;
    for(auto i : adj[ver]){
        if(i.F==par[ver]||blocked[i.F])C;
        par[i.F]=ver;
        ret+=DFS(i.F);
    }
    R ret;
}
int dfs(int ver,int per,int d,int w){
    if(d>1e6)R -1;
    int ret=-1;
    if(k>d&&t[k-d]!=-1){
        if(ret==-1||ret>t[k-d]+w)
            ret=t[k-d]+w;
    }
    vec.pb(ver);
    dis[ver]={d,w};
    for(auto i : adj[ver]){
        if(i.F==per||blocked[i.F])C;
        int x=dfs(i.F,ver,d+i.S,w+1);
        if(x!=-1&&(ret==-1||ret>x)){
            ret=x;
        }
    }
    R ret;
}
int creat(int ver){
    v.clear();
    par[ver]=-1;
    DFS(ver);
    int pos,mn=INF;
    for(auto i : v){
        int mx=v.SI-sub[i];
        for(int j=0;j<adj[i].SI;j++){
            int node=adj[i][j].F;
            if(blocked[node]||node==par[i])C;
            mx=max(mx,sub[node]);
        }
        if(mn>mx){
            mn=mx;
            pos=i;
        }
    }
    int ret=-1;
    blocked[pos]=1;
    for(auto i : v){
        sub[i]=0;
    }
//    cout<<pos<<endl;
    t[0]=0;
    for(auto i : adj[pos]){
        if(blocked[i.F])C;
        int x=dfs(i.F,-1,i.S,1);
        if(x!=-1&&(ret==-1||ret>x))
            ret=x;

        for(int j=0;j<vec.SI;j++){
            int x=vec[j];
            if(t[dis[x].F]==-1||t[dis[x].F]>dis[x].S)
                t[dis[x].F]=dis[x].S;
            dis[x]={-1,-1};
        }
        vec.clear();
    }
    for(auto i : v)
        t[i]=par[i]=-1;
    for(auto i : adj[pos]){
        if(blocked[i.F])C;
        int x=creat(i.F);
        if(x!=-1&&(ret==-1||ret>x))
            ret=x;
    }
    R ret;
}
int best_path(int NN, int KK, int H[][2], int L[])
{
    MEM(t,-1);
    n=NN;
    k=KK;
    for(int i=0;i<n-1;i++){
        adj[H[i][0]].pb({H[i][1],L[i]});
        adj[H[i][1]].pb({H[i][0],L[i]});
    }
    int ret=creat(0);
    return ret;
}

Compilation message

race.cpp: In function 'int creat(int)':
race.cpp:68:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int j=0;j<adj[i].SI;j++){
                      ^
race.cpp:91:22: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
         for(int j=0;j<vec.SI;j++){
                      ^
race.cpp:79:17: warning: 'pos' may be used uninitialized in this function [-Wmaybe-uninitialized]
     blocked[pos]=1;
     ~~~~~~~~~~~~^~
# Verdict Execution time Memory Grader output
1 Incorrect 10 ms 8952 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 10 ms 8952 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 10 ms 8952 KB Output isn't correct
2 Halted 0 ms 0 KB -
# Verdict Execution time Memory Grader output
1 Incorrect 10 ms 8952 KB Output isn't correct
2 Halted 0 ms 0 KB -