Pagini recente » Cod sursa (job #1056412) | Cod sursa (job #3250933) | Cod sursa (job #517095) | Cod sursa (job #2551114) | Cod sursa (job #298545)
Cod sursa(job #298545)
#include<cstdio>
#include<vector>
using namespace std;
#define INPUT "pscnv.in"
#define OUTPUT "pscnv.out"
#define VP vector< pair< long, long > >
#define pb push_back
#define mp make_pair
const long NMAX = 250001;
const int KMAX = 1000;
FILE *fin = fopen(INPUT, "r"), *fout = fopen(OUTPUT, "w");
long N, M, X, Y;
VP Cost[ NMAX ];
long Deg[ NMAX ];
void readData()
{
long Node1, Node2, Ct;
fscanf(fin, "%ld %ld %ld %ld", &N, &M, &X, &Y);
for(long i = 1; i <= M; ++i)
{
fscanf(fin, "%ld %ld %ld", &Node1, &Node2, &Ct);
Cost[ Ct ].pb(mp(Node1, Node2));
}
}
int root(long Node)
{
if(Deg[ Node ] == Node) return Node;
Deg[ Node ] = root(Deg[ Node ]);
return Deg[ Node ];
}
void combine(long Node1, long Node2)
{
Deg[ root( Node1 ) ] = root(Node2);
}
void solve()
{
VP::iterator it;
for(long i = 1; i <= N; ++i) Deg[ i ] = i;
for(int i = 1; i <= KMAX; ++i)
{
for(it = Cost[ i ].begin(); it != Cost[ i ].end(); ++it)
if(root((*it).first) != root((*it).second)) combine((*it).first, (*it).second);
if(root(X) == root(Y)){
fprintf(fout, "%d\n", i);
break;
}
}
}
int main()
{
readData();
solve();
fclose(fin);
fclose(fout);
return 0;
}