用的01BFS,不知道为什么WA了11个点
#include<bits/stdc++.h>
using namespace std;
const int maxn=200000+5;
struct node{
int id,tp,w;
node(int _tp,int _id,int _w){
tp=_tp;
id=_id;
w=_w;
}
};
struct road{
int to,id;
road(int _to,int _id){
to=_to;
id=_id;
}
};
int n,m;
int ans=-1;
bool vis[maxn];
vector<road> e[maxn];
deque<node> q;
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=m;i++){
int u,v,id;
scanf("%d%d%d",&u,&v,&id);
e[u].push_back(road(v,id));
e[v].push_back(road(u,id));
}
q.push_front(node(1,-1,0));
while(!q.empty()){
node now=q.front();
q.pop_front();
int u=now.tp;
if(u==n) {
ans=now.w;
break;
}
if(vis[u]) continue;
vis[u]=true;
for(auto v:e[u]){
if(!vis[v.to]){
if(v.id==now.id) q.push_front(node(v.to,v.id,now.w));
else q.push_back(node(v.to,v.id,now.w+1));
}
}
}
printf("%d\n",ans);
return 0;
}