제출 #899085

#제출 시각아이디문제언어결과실행 시간메모리
899085Denkata공장들 (JOI14_factories)C++14
컴파일 에러
0 ms0 KiB
#include<bits/stdc++.h>
#include "factories.h"
#include "grader.cpp"
using namespace std;
const int maxn = 5e5+3;
int i,j,p,q,n,m,k,par[maxn],sz[maxn],tin[maxn],tout[maxn],br,l,timer,lasttime[maxn],cnt;
long long ans[maxn],raz[maxn];
vector <int> up[maxn];
///moje i set
struct Put
{
    int v;
    long long d;
};
bool operator<(Put a,Put b)
{
    return a.v<b.v;
}
set <Put> v[maxn];
void dfs(int u,int p)
{
    tin[u]=++timer;
    up[u][0]=p;
    for(int j=1;j<=l;j++)
    {
        up[u][j]=up[up[u][j-1]][j-1];
    }
    for(auto i:v[u])
    {
        int q=i.v;
        if(q!=p)
        {
            raz[q]=raz[u]+i.d;
            dfs(q,u);
        }
    }
    //cout<<u<<" "<<p<<endl;
    tout[u]=++timer;
}
bool upper(int a,int b)
{
    return (tin[a]<=tin[b] && tout[a]>=tout[b]);
}
int lca(int a,int b)
{
    if(upper(a,b))return a;
    if(upper(b,a))return b;
    for(int ii=l;ii>=0;ii--)
    {
        if(!upper(up[a][ii],b))
            a=up[a][ii];
    }
    return up[a][0];
}
int find_size(int u,int p)
{
    sz[u] = 1;
    for(auto i:v[u])
        if(i.v!=p)sz[u]+=find_size(i.v,u);
    return sz[u];
}
int find_centroid(int u,int p,int N)
{
    for(auto i:v[u])
        if(i.v!=p && sz[i.v]>N/2)return find_centroid(i.v,u,N);
    return u;
}
void centroid_decomposition(int u,int p)
{
    cout<<u<<" centr "<<p<<endl;
    int N = find_size(u,p);
    int c = find_centroid(u,p,N);
    par[c] = p;
    cout<<"par of "<<c<<" is "<<p<<endl;
    stack <pair <int,int>> st;
    for(auto i:v[c])
    {
        v[i.v].erase({c,i.d});
        centroid_decomposition(i.v,c);
    }
    v[c].clear();

}
void Init(int N, int A[], int B[], int D[])
{
    n = N;
    for(i=0;i<=N-2;i++)
    {
        p = A[i];q = B[i];k = D[i];
        p++;q++;
       // cout<<p<<" "<<q<<" "<<k<<endl;
        v[p].insert({q,k});
        v[q].insert({p,k});
    }
    while((1<<l)<=n)
        l++;
    for(i=0;i<=n+1;i++)
        up[i].resize(l+6);
    tout[0] = INT_MAX;
    dfs(1,0);
    //
    centroid_decomposition(1,0);
    //cout<<"krai"<<endl;
    for(i=1;i<=n;i++)
        ans[i] = LLONG_MAX;
}
long long dist(int u,int u2)
{
    return raz[u]+raz[u2]-2*raz[lca(u,u2)];
}
void add(int ver)
{
    for(j=ver;j!=0;j=par[j])
    {
        if(lasttime[j]!=cnt)
            ans[j] = dist(ver,j),lasttime[j] = cnt;
        else ans[j] = min(ans[j],dist(ver,j));
    }
}
long long Query(int S, int X[], int T, int Y[])
{
    ///+1 to all vertices
    long long otg = LLONG_MAX;
    ++cnt;
    for(i=0;i<S;i++)
    {
        add(X[i]+1);
    }
    for(i=0;i<T;i++)
    {
        p = Y[i]+1;
        for(j=p;j!=0;j=par[j])
            if(lasttime[j]==cnt)otg = min(otg,dist(p,j)+ans[j]);
    }


    return otg;
}

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

/usr/bin/ld: /tmp/cc0e0t7o.o: in function `main':
grader.cpp:(.text.startup+0x0): multiple definition of `main'; /tmp/ccuxfqWp.o:factories.cpp:(.text.startup+0x0): first defined here
collect2: error: ld returned 1 exit status