1 条题解

  • 1
    @ 2023-4-6 21:21:55

    先说明以下,这题是一本通里的。考虑到*ZH的懒惰值,数据只有一个还tm的是样例!

    所以这里给一个网站,所有一本通的题目都可以在以下网站找到:题库和测试点

    公用账号: 用户名:LZtool 密码:1234qwer

    PS:这个网站的注册和提交都极度阴间,所以提供了一个

    以下是我的代码,用结构体优化了链表 (虽然看上去更麻烦了),以下代码:

    #include <bits/stdc++.h>
    using namespace std;
    int head[200];
    
    int d[200],v[200];
    
    int m,n,t,ans=0;
    
    priority\_queue<pair<int ,int>>q;
    
    struct lll{int x,y,w,next;}line[10000];
    
    void ppp(int i)
    {    
        q.push(make\_pair(-d[i],i));
    }
    
    void djs()
    {
        memset(d,0x3f,sizeof(d));
        d[1]=0;
        ppp(1);
        while (!q.empty()){
            int x=q.top().second;q.pop();
            if(v[x])continue;
            v[x]=1;
            for(int i=head[x];i;i=line[i].next){
                int y=line[i].y,w=line[i].w;
                if(d[y]>d[x]+w){
                    d[y]=d[x]+w;
                    ppp(y);
                }
            }
        }
    }
    void add(int i,int x,int y,int w)
    {
        line[i].x=x;
        line[i].y=y;
        line[i].w=w;
        line[i].next=head[line[i].x];
        head[line[i].x]=i;
    }
    
    int main()
    {
        cin>>n>>m;
        int x,y,z;
        for(int i=1;i<=m;i++){
            cin>>x>>y>>z;
            add(i,x,y,z);
            add(i+m,y,x,z);
        }
        djs();
        for(int i=1;i<=n;i++){
            ans=max(ans,d[i]);
        }
        if(ans==0x3f3f3f3f){cout<<-1;return 0;}
        cout<<ans;
        return 0;
    }
    
    • 1

    信息

    ID
    389
    时间
    1000ms
    内存
    128MiB
    难度
    6
    标签
    递交数
    22
    已通过
    12
    上传者