Cod sursa(job #3036539)

Utilizator AndreidreiGresoiu Liviu-Andrei Andreidrei Data 24 martie 2023 15:46:14
Problema Atac Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.99 kb
#include <bits/stdc++.h>
#pragma GCC optimize ("O3")
#define din cin
#define dout out
#define pi 3.14159265359
#define sw(x,y) x^=y,y^=x,x^=y
#define bmin(a,b)((a<b)?(a):(b))
#define bmax(a,b)((a>b)?(a):(b))
#define bminify(a,b)a=bmin(a,b)
#define bmaxify(a,b)a=bmax(a,b)
#define forq(i,ii,n)for(i=ii;i<n;i++)
#define f first
#define s second
using namespace std;
typedef long long ll;
ifstream in("atac.in");
ofstream out("atac.out");
int n,m,p,q,f[32001][15][2],i,j,k,l,xx,yy,zz,aa,bb,cc,dd,x,y,z,e[64001][16],d[64001],r[32001],le[32001];
vector<pair<int,int>>g[32001];
void df(int v)
{
    e[l][0]=v,r[v]=l++;
    for(auto i:g[v])
        if(le[i.f]==0)
    {
        le[i.f]=le[v]+1;
        f[i.f][0][0]=i.s,f[i.f][0][1]=v;
        df(i.f);
        e[l++][0]=v;
    }
}
int main()
{
ios_base::sync_with_stdio(false);
in.tie(nullptr),out.tie(nullptr);
for(i=2;i<64001;i++)d[i]=d[i/2]+1;
in>>n>>m>>p;
for(i=2;i<=n;i++)
    in>>j>>k,g[i].push_back(make_pair(j,k)),g[j].push_back(make_pair(i,k));
le[1]=1;
df(1);
for(j=0;j<15;j++)
    for(i=0;i<l;i++)
        if(i+(1<<j)>=l)
            e[i][j+1]=e[i][j];
            else e[i][j+1]=(le[e[i][j]]>le[e[i+(1<<j)][j]])?e[i+(1<<j)][j]:e[i][j];
for(j=0;j<14;j++)
    for(i=1;i<=n;i++)
        f[i][j+1][1]=f[f[i][j][1]][j][1],f[i][j+1][0]=bmin(f[i][j][0],f[f[i][j][1]][j][0]);
//for(j=0;j<5;j++,cout<<'\n')for(i=1;i<=n;i++)cout<<f[i][j][0]<<' ';
in>>xx>>yy>>aa>>bb>>cc>>dd;
while(m--)
{

    if(xx==yy)
        zz=0;
        else{
    x=r[xx],y=r[yy],zz=INT_MAX;
    if(x>y)sw(x,y);
    k=d[y-x];
    z=(le[e[x][k]]<le[e[y-(1<<k)+1][k]])?e[x][k]:e[y-(1<<k)+1][k];
    x=xx,y=yy;
    for(j=14;j>=0;j--)
    {
        if(le[z]<=le[f[x][j][1]])bminify(zz,f[x][j][0]),x=f[x][j][1];
        if(le[z]<=le[f[y][j][1]])bminify(zz,f[y][j][0]),y=f[y][j][1];
    }
    //cout<<z<<' '<<zz<<'\n';
    }
    if(m<p)out<<zz<<'\n';
    //cout<<xx<<' '<<yy<<' '<<z<<' '<<zz<<'\n';
    xx=(xx*aa+yy*bb)%n+1,yy=(yy*cc+zz*dd)%n+1;
}
}