Pagini recente » Cod sursa (job #796938) | Cod sursa (job #2549688) | Cod sursa (job #2125985) | Cod sursa (job #2249443) | Cod sursa (job #1050537)
#include <fstream>
#include <vector>
#define Cmax 1005
#define Nmax 250005
#define Lg 3000000
#define verf ++poz==Lg? fin.read(Buffer,Lg), poz=0:0
using namespace std;
ifstream fin("pscnv.in");
int N,X,Y,t[Nmax],poz;
char Buffer[Lg];
struct Pereche
{
int x,y;
};
vector <Pereche> L[Cmax];
inline void Citeste(int &x)
{
for(; Buffer[poz]<'0' || Buffer[poz]>'9'; verf);
for(x=0; Buffer[poz]>='0' && Buffer[poz]<='9'; x=x*10+Buffer[poz]-'0', verf);
}
inline void Read()
{
int M,i,cost;
Pereche w;
Citeste(N); Citeste(M); Citeste(X); Citeste(Y);
for(i=1;i<=M;++i)
{
Citeste(w.x); Citeste(w.y); Citeste(cost);
L[cost].push_back(w);
}
fin.close();
}
inline int Find(int a)
{
int i=a,rad;
while(t[a]>=0)
a=t[a];
rad=a;
while(t[i]>=0)
{
a=t[i];
t[i]=rad;
i=a;
}
return rad;
}
inline void Union(int a,int b)
{
t[a]+=t[b]; t[b]=a;
}
inline int Solve()
{
int i,n1,n2,a,b,len,cost;
for(i=1;i<=N;++i)
t[i]=-1;
for(cost=1;cost<=1000;++cost)
{
len=L[cost].size();
for(i=0;i<len;++i)
{
n1=L[cost][i].x; n2=L[cost][i].y;
a=Find(n1); b=Find(n2);
if(a!=b)
Union(a,b);
}
if(Find(X)==Find(Y))
return cost;
}
}
int main()
{
Read();
ofstream fout("pscnv.out");
fout<<Solve()<<"\n";
fout.close();
}