97分,最后3个点TLE,各位大佬请问怎么改
#include <bits/stdc++.h>
using namespace std;
inline int read(){
register int x=0,f=1;
register char c=getchar();
while(c<'0'||c>'9'){
if(c=='-')
f=-1;
c=getchar();
}
while(c>='0'&&c<='9'){
x=(x<<1)+(x<<3)+(c^48);
c=getchar();
}
return x*f;
}
inline void write(register int x){
if(x<0){
putchar('-');
x=-x;
}
if(x>9)
write(x/10);
putchar(x%10+'0');
}
struct node
{
int to, w, ne ,id;
}e[1000005],o[1000005];
int head[1000005],cnt,n,m,w,l[1005];
bool flag=1;
inline void adde(int x, int y, int w,int id)
{
e[++cnt].w=w;
e[cnt].id=id;
e[cnt].to=y;
e[cnt].ne=head[x];
head[x]=cnt;
}
int vis[100005],dis[100005],ans=-0x3f3f3f3f;
void init()
{
memset(vis, 0, sizeof(vis));
memset(dis, 0x3f, sizeof(dis));
}
void dijkstra(int st)
{
priority_queue<pair < int,int > >Q;
dis[n]=0;
Q.push(make_pair(0 ,n));
while(!Q.empty()) {
int p = Q.top().second;
Q.pop();
if(vis[p]) continue;
vis[p] = 1;
for(int i = head[p]; i ; i=e[i].ne) {
int to = e[i].to;
if(e[i].id==st) continue;
if(dis[to]<=dis[p]+e[i].w) continue;
dis[to]=dis[p]+e[i].w;
Q.push(make_pair(-dis[to],to));
if(flag) l[to]=e[i].id;
}
}
}
int main(){
n=read(),m=read();
for(int i=1;i<=m;i++){
int u,v,w;
u=read(),v=read(),w=read();
adde(u,v,w,i);
adde(v,u,w,i);
o[i].to=u;
o[i].w=v;
}
init();
dijkstra(0);
flag=0;
int b=1;
while(l[b]!=0){
init();
dijkstra(l[b]);
ans=max(ans,dis[1]);
if(o[l[b]].to==b){
b=o[l[b]].w;
}else{
b=o[l[b]].to;
}
}
write(ans);
}