赤裸裸的最短路,需要注意下枚举过程就好了。直接贴上别人的代码,发现他的代码挺符合我的风格,以后就这样写了。

#include <bits/stdc++.h>

using namespace std;

struct node{
    int y,z,id;
    node(){}
    node(int y,int z,int id):y(y),z(z),id(id){}
};
vector<node> e[300100];

int n,m,u;
int f[300100];
int ed[300100];
long long dis[300100];
vector<int> ans;
const long long inf = (long long)300100*1000000000;

int main(){
    cin >>n >>m;
    for (int i=1;i<=m;i++){
        int x,y,z;
        cin >> x>>y>>z;
        ed[i]=z;
        e[x].push_back(node(y,z,i));
        e[y].push_back(node(x,z,i));
    }
    cin >> u;
    queue<int> q;
    q.push(u);
    for (int i=1;i<=n;i++) dis[i]=inf;
    //for (int i=1;i<=n;i++) cout<<dis[i]<<endl;
    dis[u]=0;
    while (!q.empty()){
        int now = q.front();
        q.pop();
        for (int i=0;i<e[now].size();i++){
            int v = e[now][i].y;
            if (dis[now]+e[now][i].z<dis[v] || dis[now]+e[now][i].z==dis[v] && e[now][i].z<ed[f[v]]){
                f[v]=e[now][i].id;
                dis[v]=dis[now]+e[now][i].z;
                q.push(v);
            }
        }
    }
    long long cnt=0;
    for (int i=1;i<=n;i++)
        if (f[i]!=0) cnt+=ed[f[i]],ans.push_back(f[i]);
    sort(ans.begin(),ans.end());
    cout << cnt<<endl;
    for(int i=0;i<ans.size();i++){
        if (i>0) cout<<" ";
        cout << ans[i];
    }
    return 0;

}

转载于:https://www.cnblogs.com/acvc/p/4517508.html

codeforces 303 div2 E相关推荐

  1. codeforces#320(div2) D Or Game 贪心

    codeforces#320(div2) D  "Or" Game  贪心 D. "Or" Game time limit per test 2 seconds ...

  2. codeforces 628.div2

    # Codeforces 628.div2 A. EhAb AnD gCd B. CopyCopyCopyCopyCopy C. Ehab and Path-etic MEXs D. Ehab the ...

  3. codeforces#324(div2) E. Anton and Ira 贪心

    codeforces#324(div2) E. Anton and Ira  贪心 E. Anton and Ira time limit per test 1 second memory limit ...

  4. codeforces 712 div2 ABC

    codeforces 712 div2 ABC A. Déjà Vu A palindrome is a string that reads the same backward as forward. ...

  5. codeforces round div2,3周赛补题计划(从开学到期末)

    1. 本学期场次 从2020.09.19-2021.01.18,一共18周. 题号 场次 日期 备注 1475 Codeforces Round #697 (Div. 3) 1.25 1474 Cod ...

  6. Codeforces#371 Div2

    这是一场非常需要总结的比赛,交了3题,最后终测的时候3题全部没过,一下掉到了绿名,2333 Problem A 题意:给定区间[l1,r1],[l2,r2],然后给定一个整数k,求区间当中相交的元素, ...

  7. 【Codeforces #130 Div2】Solutions

    [208A  Dubstep] http://codeforces.ru/problemset/problem/208/A 题目大意:一个句子被添加了若干"WUB",问原句. 将W ...

  8. 付忠庆的练习小笔记-Codeforces #277 Div2 C

    原题链接 http://codeforces.com/contest/486/problem/C 这个C题显然更水一些 步数可以分为两种 上下一种 左右一种 总步数最小 = 上下最小+左右最小 先讨论 ...

  9. 付忠庆的练习小笔记-Codeforces #276 Div2 C

    原题链接 http://codeforces.com/contest/485/problem/C 题意:给出一个区间 l~r 求这个区间内的数中转换成2进制含'1'最多的数,若有多组解,则输出最小的那 ...

最新文章

  1. https refused 解决方法
  2. OpenCV2.4.13在VS2012环境的debug模式下的链接库输入配置的文件目录
  3. AndroidStudio报错:GradleSyncIssues-Could not install Gradle distribution from...
  4. AbstractListView源码分析6
  5. bzoj4639 博士的选取器
  6. ActiveMQ 依赖JDK版本
  7. windows服务器远程关机或重启
  8. IT从业者创业公司生存指南:创业后记 ---- 百感交集的过来人
  9. 常用网络测试的命令的实验报告计算机网络,实验一常用网络命令的使用实验报告-20210409133504.docx-原创力文档...
  10. python3下载远程代码并执行
  11. DNS解析、智能DNS原理及CDN应用和原理
  12. VBA编程_Selection总结
  13. 【2010.10.13 10:00 携程校招笔试】买可乐(50%)、派司机
  14. C++ Primer Plus学习(十三)——代码重用(has-a)
  15. Excel打印不完整
  16. angular报$injector / unpr的错误
  17. windows 录屏软件
  18. IP反查网站,ip反查接口,旁站查询接口大全,通过IP查域名汇总
  19. 相似对角化的意义(转载)
  20. FATFS 移植和配置分析

热门文章

  1. blockUI应用到Asp.Net页面时服务器控件(Button等)失效的问题
  2. 转载-程序员编程技术迅速提高的终极攻略
  3. 哪些要素会让咱们呈现抑郁症的病症
  4. iOS开发出错whose view is not in the window hierarchy!的解决
  5. Bzoj 3289: Mato的文件管理 莫队,树状数组,逆序对,离散化,分块
  6. (一)FlexViewer之整体框架解析
  7. JQuery. Parse XML children recursively. How? - Stack Overflow
  8. padding和卷积的区别_TensorFlow笔记1——20.CNN卷积神经网络padding两种模式SAME和VALID...
  9. 深度学习之 FPN (Feature Pyramid Networks)
  10. scrapy框架_Python学习之Scrapy框架