Pagini recente » Cod sursa (job #2843124) | Cod sursa (job #3210102) | Cod sursa (job #2478031) | Cod sursa (job #1436154) | Cod sursa (job #80294)
Cod sursa(job #80294)
using namespace std;
#include <cstdio>
#include <vector>
#include <string>
#define pb push_back
#define maxn 250001
struct nod{ int n, c;nod(){}; nod(int a, int b){n=a; c=b;};};
int n, source, sink;
vector<nod>a[maxn];
char ax[10000000];
void read()
{
int m;
freopen("pscnv.in","r",stdin);
scanf("%d %d %d %d\n",&n, &m, &source,&sink);
fread(ax, sizeof(char), m*19, stdin);
char *t;
int p, q, c;
t=strtok(ax, " ");
p=atoi(t);
t=strtok(0, " ");
q=atoi(t);
t=strtok(0, " \n");
c=atoi(t);
if(p!=q) a[p].pb(nod(q, c));
--m;
while(m--)
{
t=strtok(0, " ");
p=atoi(t);
t=strtok(0, " ");
q=atoi(t);
t=strtok(0, " \n");
c=atoi(t);
if(p!=q) a[p].pb(nod(q, c));
}
}
int bfs(int K)
{
int Q[maxn], p=1, q=1, u;
bool viz[maxn];
memset(viz, 0, sizeof(viz));
vector<nod>::iterator it;
Q[1]=source;
viz[source]=1;
while(p<=q)
{
u=Q[p++];
for(it=a[u].begin();it!=a[u].end();++it)
if(!viz[it->n] && it->c<=K)
{
Q[++q]=it->n;
viz[it->n]=1;
if(it->n==sink) {return 1;}
}
}
return 0;
}
void solve()
{
int i, cnt;
for(i=1000, cnt=(1<<10); cnt ; cnt>>=1)
if(i-cnt>=0)
if(bfs(i-cnt)) i-=cnt;
printf("%d\n", i);
}
int main()
{
freopen("pscnv.out","w",stdout);
read();
solve();
return 0;
}