codeforces 303 div2 E
2024-08-27 15:08:41
赤裸裸的最短路,需要注意下枚举过程就好了。直接贴上别人的代码,发现他的代码挺符合我的风格,以后就这样写了。
#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[]; int n,m,u;
int f[];
int ed[];
long long dis[];
vector<int> ans;
const long long inf = (long long)*; int main(){
cin >>n >>m;
for (int i=;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=;i<=n;i++) dis[i]=inf;
//for (int i=1;i<=n;i++) cout<<dis[i]<<endl;
dis[u]=;
while (!q.empty()){
int now = q.front();
q.pop();
for (int i=;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=;
for (int i=;i<=n;i++)
if (f[i]!=) cnt+=ed[f[i]],ans.push_back(f[i]);
sort(ans.begin(),ans.end());
cout << cnt<<endl;
for(int i=;i<ans.size();i++){
if (i>) cout<<" ";
cout << ans[i];
}
return ;
}
最新文章
- Android SDK Manager 更新代理配置
- MySQL 函数积累
- ulipad 常用快捷键
- 静态数据认证(SDA)与动态数据认证(DDA)的区别
- Android控件之GridView
- 第十一章、认识与学习 BASH 数据流重导向
- GDI画验证码
- hdu120118岁生日
- 4x4矩阵键盘扫描
- android 获取本机号码需要root吗?
- 神州数码品众_Android面试
- nodejs后台集成富文本编辑器(ueditor)
- wps中如何插入参考文献
- [Swift]LeetCode547. 朋友圈 | Friend Circles
- xshell终端向远程服务器上传文件方法
- 小白眼中的AI之~Numpy基础
- Django学习手册 - 初识django
- Django 2.x 常用命令
- C#项目”XXXXX”针对的是”.NETFramework,Version=v4.7.1”但此计算机没有安装它
- JZ2440使用笔记之熟悉uboot和Linux的移植