D 自由世界

自由世界

https://ac.nowcoder.com/acm/contest/7614/D

D 自由世界

思路很简单,先给每个点跑一遍最短路,记录的路径长度。再去管传送门,从每个传送门这跑一遍最短路,记录传送门到的路径取个最小值即可。

我一开始为了图个方便,把传送门和每个点都建了个边权为的边,导致凭空多出来至少条边,就T了,呜呜呜。。。

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int N=1e6+10;
const int inf=0x3f3f3f3f;
struct sa{
    int dis;
    int pos;
};
bool operator <(const sa &a,const sa &b) { return a.dis>b.dis; }

priority_queue<sa>q;


struct Edge
{
    int u, v, w, next;
}edge[N<<2];
int head[N];
int cnt;
void add_edge(int u, int v, int w)
{
    edge[cnt].u = u;
    edge[cnt].v = v;
    edge[cnt].w = w;
    edge[cnt].next = head[u];
    head[u] = cnt++;
}


int dis[N];
bool vis[N];
int n,m,s,t,u,v,w,T,k;

void dij(int s,int v,int d[]){
    memset(vis,0,sizeof(vis));
    for (int i=1;i<=n;i++) d[i] = inf;
    d[s]=v;
    q.push( (sa) {v,s});
    while(!q.empty())
    {
        sa ns=q.top();
        q.pop();
        int x=ns.pos;
        if(vis[x]) continue;
        vis[x]=1;
        for(int i=head[x]; i!=-1 ; i=edge[i].next)
        {
            int to=edge[i].v;
            int dd=d[x]+edge[i].w;
            if(d[to]>dd)
            {
                d[to]=dd;
                q.push( (sa) {d[to],to});
            }
        }
    }
}
int cnt1[N];
int main()
{

    memset(head,-1,sizeof(head));
    scanf("%d%d%d",&n,&m,&k);
    for(int i = 1 ;i <= m ;i++){
        scanf("%d%d%lld",&u,&v,&w);
        add_edge(u, v, w);
        add_edge(v, u, w);
    }
    for(int i = 1 ;i <= n - 1 ;i++){
        dij(i, 0, dis);
        cnt1[i + 1] = dis[i + 1];
    }
    for(int i = 1 ;i <= k; i++){
        scanf("%d",&u);
        dij(u , 0 , dis);
        for(int j = 1 ;j <= n - 1; j++){
           cnt1[j + 1] = min( cnt1[j + 1] , dis[j + 1]);
        }
    }
    long long ans = 0;
    for (int i = 2; i <= n; i++) {
        ans += cnt1[i];
    }
    printf("%lld",ans);
    return 0;
}
全部评论

相关推荐

昨天 13:04
已编辑
门头沟学院 算法工程师
智谱和米哈游都是ai大模型agent的业务钱的话还是米更多,几乎翻倍了,有没有老哥是两个公司其中一个的,能问问转正率咋样嘛,我问的hr回答都是做的好就可以转正暑期实习
码农索隆:选米哈游:短期高薪、敢承担风险、具备强创新能力,且愿押注游戏AI赛道。 选智谱:稳定性与行业通用能力积累,接受薪资差距以换取更稳妥的职业基础。
投递北京智谱华章科技等公司10个岗位 > 实习期间如何提升留用概率?
点赞 评论 收藏
分享
没有offer的呆呆:薪资有的时候也能说明一些问题,太少了活不活得下去是一方面,感觉学习也有限
点赞 评论 收藏
分享
04-17 18:32
门头沟学院 Java
野猪不是猪🐗:他跟你一个学校,你要是进来之后待遇比他好,他受得了?
点赞 评论 收藏
分享
评论
2
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务