Pagini recente » Istoria paginii runda/3_martie_simulare_oji_2024_clasele_11_12/clasament | Cod sursa (job #2876131) | Cod sursa (job #2402836) | Cod sursa (job #319327) | Cod sursa (job #741004)
Cod sursa(job #741004)
#include<fstream>
#include<vector>
#include<cmath>
#include<cstring>
#include<queue>
using namespace std;
int n,m,X,Y,kmax,kmin=2000000000,solk=2000000000;
struct Muchie{int nod,d;};
vector <int> G[250100];
Muchie M[500100];
int viz[250100];
inline void Citire()
{
int i,poz,ns,x,y,d;
char s[30];
ifstream fin("pscnv.in");
//fin>>n>>m>>X>>Y;
fin.getline(s,30);
ns=strlen(s);
poz=0;
while(s[poz]!=' ')
{
n=n*10+s[poz]-'0';
poz++;
}
poz++;
while(s[poz]!=' ')
{
m=m*10+s[poz]-'0';
poz++;
}
poz++;
while(s[poz]!=' ')
{
X=X*10+s[poz]-'0';
poz++;
}
poz++;
while(poz<ns)
{
Y=Y*10+s[poz]-'0';
poz++;
}
//
for(i=1;i<=m;i++)
{
//fin>>M[i].nod1>>M[i].nod2>>M[i].d;
fin.getline(s,30);
ns=strlen(s);
poz=0;
x=0;
while(s[poz]!=' ')
{
x=x*10+s[poz]-'0';
poz++;
}
poz++;
y=0;
while(s[poz]!=' ')
{
y=y*10+s[poz]-'0';
poz++;
}
poz++;
d=0;
while(poz<ns)
{
d=d*10+s[poz]-'0';
poz++;
}
//
M[i].nod=y;
M[i].d=d;
G[x].push_back(i);
kmax=max(kmax,d);
kmin=min(kmin,d);
}
for(i=1;i<=n;i++)
viz[i]=-1;
fin.close();
}
inline bool Ok(int K)
{
int x,y,d;
queue <int> Q;
vector <int>::iterator it;
viz[X]=K;
Q.push(X);
while(!Q.empty())
{
x=Q.front();
Q.pop();
for(it=G[x].begin();it!=G[x].end();it++)
{
y=M[*it].nod;
d=M[*it].d;
if(viz[y]!=K && d<=K)
{
viz[y]=K;
Q.push(y);
}
}
}
if(viz[Y]==K)
return true;
return false;
}
inline void CautareBinara()
{
int st,dr,mij;
st=kmin;
dr=kmax;
while(st<=dr)
{
mij=(st+dr)/2;
if(Ok(mij))
{
solk=min(solk,mij);
dr=mij-1;
}
else
st=mij+1;
}
}
inline void Afisare()
{
ofstream fout("pscnv.out");
fout<<solk<<"\n";
fout.close();
}
int main()
{
Citire();
CautareBinara();
Afisare();
return 0;
}