二分,我的命中宿敌……
代码:
#include<iostream>
#include<queue>
#include<cstring>
#define re register
#define INF 0x3f3f3f3f
using namespace std;
const int N = 1e6 + 5;
int head[N],dis[N];
int n,m,s,t,cnt;
bool flag;
struct edge{
int v,w,next;
}e[N];
inline void add(int u,int v,int w){
cnt ++;
e[cnt].v = v;
e[cnt].w = w;
e[cnt].next = head[u];
head[u] = cnt;
}
inline void SPFA(int mid){
queue<int> q;
q.push(s);
dis[s] = 1;
while(! q.empty()){
int u = q.front();
q.pop();
for(int i = head[u];i != -1;i = e[i].next){
int v = e[i].v;
if(e[i].w <= mid){
if (dis[v] == INF){
dis[v] = 1;
q.push(v);
}
}
}
}
if(dis[t] == INF){
flag = false;
}
else{
flag = true;
}
}
inline void cs(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
memset(dis,0x3f,sizeof(dis));
memset(head,-1,sizeof(head));
}
int main(){
cs();
cin>>n>>m>>s>>t;
for(re int i = 1;i <= m;i ++){
int u,v,w;
cin>>u>>v>>w;
add(u,v,w);
add(v,u,w);
}
int l = 0,r = 10000;
while(l < r){
int mid = (r - l) / 2 + l;
SPFA(mid);
if(flag){
r = mid;
}else{
l = mid + 1;
}
}
cout<<l<<"\n";
return 0;
}
题外话:坏人为啥把小明弄到警车上?