https://nanti.jisuanke.com/t/31001

题意 可以把k条边的权值变为0,求s到t的最短路

解析  分层最短路  我们建立k+1层图 层与层之间边权为0,i 向 i+1层转移,代表用了一条免费边。

#include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define all(a) (a).begin(), (a).end()
#define fillchar(a, x) memset(a, x, sizeof(a))
#define huan printf("\n");
#define debug(a,b) cout<<a<<" "<<b<<" ";
using namespace std;
const int maxn=3e6+,inf=0x3f3f3f3f;
typedef long long ll;
typedef pair<int,int> pii;
int n,m,k,st,ed,cnt,head[maxn],vis[maxn];
ll dis[maxn];
struct node
{
ll from,to,val,next;
} edge[maxn<<];
struct element
{
ll val,now;
};
bool operator < (element a,element b)
{
if(a.val==b.val)
return a.now<b.now;
return a.val>b.val;
}
void dijikstra(int s,int e)
{
priority_queue<element>q;
memset(dis,0x3f,sizeof(dis));
dis[s]=;
q.push(element{,s});
while(!q.empty())
{
element u=q.top();
q.pop();
if(vis[u.now])
continue;
vis[u.now]=;
for(int i=head[u.now]; i!=-; i=edge[i].next)
{
int to=edge[i].to;
if(dis[u.now]+edge[i].val<dis[to])
{
dis[to]=dis[u.now]+edge[i].val;
q.push(element{dis[to],to});
}
}
}
ll ans=1e18;
for(int i=; i<=k; i++)
{
if(ans>dis[e+i*n])
ans=dis[e+i*n];
}
printf("%lld\n",ans);
}
void init()
{
memset(head,-,sizeof(head));
memset(vis,,sizeof(vis));
cnt=;
}
void edgeadd(ll from,ll to,ll val)
{
edge[cnt].from=from;
edge[cnt].to=to;
edge[cnt].val=val;
edge[cnt].next=head[from];
head[from]=cnt++;
}
int main()
{
int t;
scanf("%d",&t);
while(t--)
{
init();
scanf("%d%d%d",&n,&m,&k);
st=,ed=n;
for(int i=; i<=m; i++)
{
ll x,y,z;
scanf("%lld%lld%lld",&x,&y,&z);
for(int i=; i<=k; i++) //分为k+1层图,
{
edgeadd(x+i*n,y+i*n,z); //每层图之间建边
if(i!=k)
{
edgeadd(x+i*n,y+(i+)*n,);//第层i向i+1层图建边 边权为0;
}
}
}
dijikstra(st,ed);
}
}

BZOJ 2763

dp思想

/**************************************************************
Problem: 2763
User: 1071532391
Language: C++
Result: Accepted
Time:7452 ms
Memory:6972 kb
****************************************************************/ #include <bits/stdc++.h>
#define pb push_back
#define mp make_pair
#define fi first
#define se second
#define all(a) (a).begin(), (a).end()
#define fillchar(a, x) memset(a, x, sizeof(a))
#define huan printf("\n");
#define debug(a,b) cout<<a<<" "<<b<<" ";
using namespace std;
const int maxn=2e4+,inf=0x3f3f3f3f;
typedef long long ll;
typedef pair<int,int> pii;
struct edge
{
int u,v,w,next;
}e[maxn*];
struct node
{
int x,y;
};
int cnt,dis[maxn][],head[maxn],vis[maxn][];
int n,m,k,s,t;
void init()
{
cnt=;
fillchar(head,-);
fillchar(vis,);
}
void addedge(int u,int v,int w)
{
e[++cnt].next=head[u];
e[cnt].u=u;
e[cnt].v=v;
e[cnt].w=w;
head[u]=cnt;
}
void spfa()
{
fillchar(dis,0x3f);
queue<node> q;
q.push(node{s,k});
dis[s][k]=;
while(!q.empty())
{
int u=q.front().x;
int t=q.front().y;
q.pop();
vis[u][t]=;
for(int i=head[u];i!=-;i=e[i].next)
{
int v=e[i].v,w=e[i].w;
if(dis[v][t]>dis[u][t]+w)
{
dis[v][t]=dis[u][t]+w;
if(!vis[v][t])
{
vis[v][t]=;
q.push(node{v,t});
}
}
if(t>&&dis[v][t-]>dis[u][t])
{
dis[v][t-]=dis[u][t];
if(!vis[v][t-])
{
vis[v][t-]=;
q.push(node{v,t-});
}
}
}
}
int ans=1e9;
for(int i=;i<=k;i++)
{
//cout<<dis[i][0]<<" "<<i<<endl;
ans=min(ans,dis[t][i]);
}
printf("%d\n",ans);
}
int main()
{
init();
scanf("%d%d%d%d%d",&n,&m,&k,&s,&t);
for(int i=;i<m;i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
addedge(u,v,w);
addedge(v,u,w);
}
spfa();
return ;
}

ACM-ICPC 2018 南京赛区网络预赛 L && BZOJ 2763 分层最短路的更多相关文章

  1. ACM-ICPC 2018 南京赛区网络预赛 L题(分层最短路)

    题目链接:https://nanti.jisuanke.com/t/31001 题目大意:给出一个含有n个点m条边的带权有向图,求1号顶点到n号顶点的最短路,可以使<=k条任意边的权值变为0. ...

  2. ACM-ICPC 2018 南京赛区网络预赛 L题(分层图,堆优化)

    题目链接: https://nanti.jisuanke.com/t/31001 超时代码: #include<bits/stdc++.h> using namespace std; # ...

  3. ACM-ICPC 2018 南京赛区网络预赛 L. Magical Girl Haze 最短路+分层图

    类似题解 There are NN cities in the country, and MM directional roads from uu to v(1\le u, v\le n)v(1≤u, ...

  4. ACM-ICPC 2018 南京赛区网络预赛 L. Magical Girl Haze

    262144K   There are NN cities in the country, and MM directional roads from uu to v(1\le u, v\le n)v ...

  5. ACM-ICPC 2018 南京赛区网络预赛 L 【分层图最短路】

    <题目链接> 题目大意: 有N个城市,这些城市之间有M条有向边,每条边有权值,能够选择K条边 边权置为0,求1到N的最短距离. 解题分析: 分层图最短路模板题,将该图看成 K+1 层图,然 ...

  6. ACM-ICPC 2018 南京赛区网络预赛 L.Magical Girl Haze(分层最短路)

    There are N cities in the country, and M directional roads from u to v(1≤u,v≤n). Every road has a di ...

  7. ACM-ICPC 2018 南京赛区网络预赛 - L Magical Girl Haze (分层迪杰斯特拉)

    题意:N个点,M条带权有向边,求可以免费K条边权值的情况下,从点1到点N的最短路. 分析:K<=10,用dist[i][j]表示从源点出发到点i,免费j条边的最小花费.在迪杰斯特拉的dfs过程中 ...

  8. 【ACM-ICPC 2018 南京赛区网络预赛 L】Magical Girl Haze

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 定义dis[i][j]表示到达i这个点. 用掉了j次去除边的机会的最短路. dis[1][0]= 0; 在写松弛条件的时候. 如果用 ...

  9. ACM-ICPC 2018 南京赛区网络预赛 L. Magical Girl Haze (分层dijkstra)

    There are NN cities in the country, and MMdirectional roads from uu to v(1\le u, v\le n)v(1≤u,v≤n). ...

随机推荐

  1. HTTPS时代已来,你做好准备了吗?

    早在今年年初,Google在其安全博客上已经表明,从7月开始,Chrome68会将所有的HTTP网站标记为不安全.随后,Mozilla也表明,Firefox浏览器也准备将所有HTTP网站标记为不安全. ...

  2. Java堆分配参数总结

    与Java应用程序堆内存相关的JVM参数有: -Xms:设置Java应用程序启动时的初始堆大小 -Xmx:设置Java应用程序能获得的最大堆大小 -Xss:设置线程栈的大小 -XX:MinHeapFr ...

  3. 获取页面URL两种方式

    以请求http://localhost:8080/doctor/demo?code=1为例 一:用java代码获取 //获取URL中的请求参数.即?后的条件 code=1 String querySt ...

  4. rmdir

    rmdir——删除空目录 remove empty directories 命令所在路径:bin/rmdir 示例: # rmdir /tmp/japan/longze 删除/tmp/japan/目录 ...

  5. elasticsearch插入索引文档 对数字字符串的处理

    对于字符串在搜索匹配的时候,字符串是数字的话需要匹配的是精准匹配,如果是部分匹配字符串的话,需要进行处理,把数字型字符串作为一个字符中的数组表示插入之后显示如下: 如果插入之后显示如画线部分的话,则表 ...

  6. 2018 CCPC 女生赛 hdoj6288 缺失的数据范围

    题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=6288 Summarize:1.二分查找答案: 2.自带log函数精度不够,需自己写: 3.注意二分递归 ...

  7. ps----像素与分辨率

    1.为了用于印刷,所以调整文档尺寸也很重要. 2.像素的多少决定了文件的大小,像素越多图像越清晰越逼真. 3.文档的尺寸改变需要结合分辨率. 4.像素固定的情况下修改分辨率高度宽度也会变化. 5.画面 ...

  8. 如何实时查看mysql当前连接数?

    1.查看当前所有连接的详细资料: ./mysqladmin -uadmin -p -h10.140.1.1 processlist2.只查看当前连接数(Threads就是连接数.): ./mysqla ...

  9. 关于在views对models创建的表的简单操作

    models.User.objects.create(c1='a',c2='b') obj=models.User(c1='a',c2='b') obj.save() 增加 models.User.o ...

  10. POJ 3621 Sightseeing Cows (最优比率环 01分数划分)

    题意: 给定L个点, P条边的有向图, 每个点有一个价值, 但只在第一经过获得, 每条边有一个花费, 每次经过都要付出这个花费, 在图中找出一个环, 使得价值之和/花费之和 最大 分析: 这道题其实并 ...