97分求助
查看原帖
97分求助
983912
Linzijun_0607楼主2024/2/25 16:57

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);
}
2024/2/25 16:57
加载中...