1 条题解

  • 0
    @ 2025-10-8 16:48:53
    #include<bits/stdc++.h>
    using namespace std;
    typedef pair<int,int> PII;
    const int N=110;
    vector<PII>G[N];
    int n,m,st,ed,dis[N];bool bk[N][N],vis[N]; 
    void dijkstra()
    {
        priority_queue<PII,vector<PII>,greater<PII>> Q;
    	memset(dis,0x3f,sizeof(dis));dis[st]=0;
        memset(vis,0,sizeof(vis));
    	Q.push({0,st});
        while(!Q.empty())
        {
            int x=Q.top().second; Q.pop(); 
            if(vis[x])continue;
            vis[x]=1;
            for(auto i:G[x])
            {
                int y=i.first,w=i.second;
                int t= (bk[x][y]==1)?w:0;
                if( dis[y]>dis[x]+t )
                {
                    dis[y]=dis[x]+t;
                    Q.push({dis[y],y});
                }
            }
        }
    }
    int main()
    {
        while(scanf("%d%d",&n,&m)!=EOF)
        {
            memset(G,0,sizeof(G));
            for(int i=1,x,y,w;i<=m;i++)
            {
                scanf("%d%d%d",&x,&y,&w);
                G[x].emplace_back(PII{y,w});
                G[y].emplace_back(PII{x,w});
            }
            int R;scanf("%d", &R);
            memset(bk, 0, sizeof(bk));
            for(int i=1,x,y;i<=R;i++)
            {
                scanf("%d%d",&x,&y);
                bk[x][y]=bk[y][x]=1;
            }
            scanf("%d%d",&st,&ed);
            dijkstra();
            printf("%d\n",dis[ed]);
        }
        return 0;
    }
    
    • 1

    信息

    ID
    261
    时间
    1000ms
    内存
    128MiB
    难度
    7
    标签
    递交数
    311
    已通过
    74
    上传者