Pagini recente » Cod sursa (job #1461951) | Cod sursa (job #2828465) | Cod sursa (job #1432826) | Cod sursa (job #320485) | Cod sursa (job #214295)
Cod sursa(job #214295)
#include <fstream>
#include <queue>
#define infinit 0x3f3f3f
using namespace std;
ifstream fin ("atac.in");
ofstream fout ("atac.out");
struct nod
{
int inf,cost;
nod *next;
} *sir[33000];
queue <int > Q;
int n,m,a,b,c,d,z,p,x,y;
int dist[33000],viz[33000];
void baga(int x,int y,int c)
{
nod *q=new nod;
q->inf=x;
q->cost=c;
q->next=sir[y];
sir[y]=q;
}
void citire()
{
int U,V;
fin>>n>>m>>p;
for (int i=0;i<n-1;i++)
{
fin>>U>>V;
baga(U,i+2,V);
baga(i+2,U,V);
}
fin>>x>>y>>a>>b>>c>>d;
}
inline int minim(int a,int b)
{
return a<b?a:b;
}
int f_x()
{
return (x*a +y*b)%n+1;
}
int f_y()
{
return (y*c+z*d)%n+1;
}
int afla()
{
if (x==y)
return 0;
memset(dist,infinit,sizeof dist);
memset(viz,0,sizeof(viz));
Q.push(x);
viz[x]=1;
int min;
while (!Q.empty() && !viz[y])
{
min=Q.front();
Q.pop();
for (nod *i=sir[min];i;i=i->next)
{
if (!viz[i->inf])
{
viz[i->inf]=1;
Q.push(i->inf);
dist[i->inf]=minim(dist[min],i->cost);
}
}
}
while (!Q.empty())
Q.pop();
return dist[y];
}
void afisare()
{
for (int i=1;i<=m-p;i++)
{
z=afla();
x=f_x();
y=f_y();
}
for (int i=0;i<p;i++)
{
z=afla();
fout<<z<<"\n";
x=f_x();
y=f_y();
}
}
int main ()
{
citire();
afisare();
return 0;
}