[CF715B] Complete The Graph
[CF715B] Complete The Graph
Description
给
Solution
我们考虑一个暴力做法,即首先我们把边权不为 0 的边的编号存进一个 vector 内,考虑仅在图中存边权不为 0 的边。而后我们跑 NO
,若
而后我们考虑
而后我们考虑不断枚举边权为 0 的并且把其边权设为
这种贪心的思路足够通过本题。
Code
#include<bits/stdc++.h>
using namespace std;
#define int long long
const int N=5e4+7;
vector<pair<int,int> > G[N];
vector<int> vec;
int dis[N<<2];
bool _vis[N<<2];
int n,m;
int u[N],v[N],w[N];
const int inf=1e18;
int p,l,s,t;
struct node{
int dis,id;
friend bool operator < (node a,node b){
return a.dis>b.dis;
}
};
void Dj(int s){
memset(_vis,0,sizeof _vis);
priority_queue<node> q;
memset(dis,0x3f,sizeof dis);
dis[s]=0;
q.push({0,s});
while(!q.empty()){
int u=q.top().id;
q.pop();
if(_vis[u]) continue;
_vis[u]=1;
for(auto i:G[u]){
int k=i.first,w=i.second;
if(dis[k]>dis[u]+w){
dis[k]=dis[u]+w;
q.push({dis[k],k});
}
}
}
}
void print()
{
puts("YES");
for(int i=1;i<=m;i++){
if(!w[i]){
if(i<p)
printf("%lld %lld %lld\n",u[i],v[i],1ll);
if(i==p)
printf("%lld %lld %lld\n",u[i],v[i],l-dis[t]+1);
if(i>p)
printf("%lld %lld %lld\n",u[i],v[i],inf);
}
else printf("%lld %lld %lld\n",u[i],v[i],w[i]);
}
}
signed main(){
scanf("%lld%lld%lld%lld%lld",&n,&m,&l,&s,&t);
for(int i=1;i<=m;i++){
scanf("%lld%lld%lld",&u[i],&v[i],&w[i]);
if(!w[i]){vec.push_back(i);continue;}
G[u[i]].push_back(make_pair(v[i],w[i]));G[v[i]].push_back(make_pair(u[i],w[i]));
}
Dj(s);
// printf("dis[t]=%d\n",dis[t]);
if(dis[t]<l) return printf("NO\n"),0;
if(dis[t]==l){
printf("YES\n");
for(int i=1;i<=m;i++){
printf("%lld %lld %lld\n",u[i],v[i],w[i]==0?inf:w[i]);
}
return 0;
}
for(int i:vec){
G[u[i]].push_back(make_pair(v[i],1));
G[v[i]].push_back(make_pair(u[i],1));
Dj(s);
if(dis[t]>l) continue;
p=i;
print();
return 0;
}
puts("NO");
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】