ACM-ICPC 2018 南京赛区网络预赛 L题(分层图,堆优化)
题目链接:
https://nanti.jisuanke.com/t/31001
超时代码:
#include<bits/stdc++.h>
using namespace std;
# define maxn 10000000+10
# define inf 0x3f3f3f3f
int n,m,k;
int num;
int head[maxn];
int dis[maxn];
int vis[maxn];
struct node
{
int ne;
int to;
int co;
} q[maxn];
void add(int u,int v,int w)
{
q[++num].ne=head[u];
q[num].to=v;
q[num].co=w;
head[u]=num;
}
void spfa()
{
queue<int >p;
while(!p.empty())p.pop();
memset(dis,inf,sizeof(dis));
memset(vis,0,sizeof(vis));
dis[1]=0;
vis[1]=1;
p.push(1);
while(!p.empty())
{
int top=p.front();
vis[top]=0;
p.pop();
for(int i=head[top]; i!=-1; i=q[i].ne)
{
int temp=q[i].to;
if(dis[temp]>dis[top]+q[i].co)
{
dis[temp]=dis[top]+q[i].co;
if(!vis[temp])
{
vis[temp]=1;
p.push(temp);
}
}
}
}
}
void solve()
{
spfa();
int minn=inf;
for(int i=0; i<=k; i++)
{
minn=min(minn,dis[n+i*n]);
}
printf("%d\n",minn);
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(head,-1,sizeof(head));
num=0;
scanf("%d%d%d",&n,&m,&k);
if(k==0)
{
for(int i=1; i<=m; i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
add(u,v,w);
add(v,u,w);
}
spfa();
printf("%d\n",dis[n]);
return 0;
}
else
{
for(int i=1; i<=m; i++)
{
int u,v,w;
scanf("%d%d%d",&u,&v,&w);
for(int j=0; j<=k; j++)
{
add(u+(n*j),v+(n*j),w);
add(v+(n*j),u+(n*j),w);
if(j<k)
{
add(u+(j)*n,v+(j+1)*n,0);
add(v+(j)*n,u+(j+1)*n,0);
}
}
}
solve();
}
}
return 0;
}
AC代码:
#include<bits/stdc++.h>
using namespace std;
# define maxn 100500
# define maxm 6000500//这个地方要注意,并不熟一层图中包括多少点就有多少条边的,还有很多边是没用的
# define inf 0x3f3f3f3f
# define ll long long
ll n,m,k;
ll num;
struct Edge
{
ll to;
ll ne;
ll co;
} q[maxm];
ll head[maxm];
ll dis[maxm];
void add(ll a,ll b,ll c)
{
q[++num].ne=head[a];
q[num].to=b;
q[num].co=c;
head[a]=num;
}
struct node
{
ll num;
ll dis;
node() {}
node(ll x,ll y)
{
num=x;
dis=y;
}
friend bool operator < (node a,node b)
{
return a.dis>b.dis;
}
};
void dijkstra()
{
priority_queue<node >p;
memset(dis,inf,sizeof(dis));
dis[1]=0;
p.push(node(1,dis[1]));
while(!p.empty())
{
node t=p.top();
p.pop();
for(int i=head[t.num]; i!=-1; i=q[i].ne)
{
int temp=q[i].to;
if(dis[temp]>dis[t.num]+q[i].co)
{
dis[temp]=dis[t.num]+q[i].co;
p.push(node(temp,dis[temp]));
}
}
}
}
int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(head,-1,sizeof(head));
num=0;
scanf("%lld%lld%lld",&n,&m,&k);
if(k>=m)
{
printf("%d\n",0);
continue;
}
for(int i=1; i<=m; i++)
{
ll u,v,w;
scanf("%lld%lld%lld",&u,&v,&w);
for(int j=0; j<=k; j++)
{
add(u+n*j,v+n*j,w);
if(j!=k)
{
add(u+n*j,v+n*(j+1),0);
}
}
}
dijkstra();
ll ans=inf ;
for(int i=0; i<=k; i++){
ans=min(ans,dis[n+i*n]);
// cout<<dis[n+i*n]<<endl;
}
printf("%lld\n",ans);
}
return 0;
}
ACM-ICPC 2018 南京赛区网络预赛 L题(分层图,堆优化)的更多相关文章
- ACM-ICPC 2018 南京赛区网络预赛 L 【分层图最短路】
<题目链接> 题目大意: 有N个城市,这些城市之间有M条有向边,每条边有权值,能够选择K条边 边权置为0,求1到N的最短距离. 解题分析: 分层图最短路模板题,将该图看成 K+1 层图,然 ...
- ACM-ICPC 2018 南京赛区网络预赛 L题(分层最短路)
题目链接:https://nanti.jisuanke.com/t/31001 题目大意:给出一个含有n个点m条边的带权有向图,求1号顶点到n号顶点的最短路,可以使<=k条任意边的权值变为0. ...
- ACM-ICPC 2018 南京赛区网络预赛 E题
ACM-ICPC 2018 南京赛区网络预赛 E题 题目链接: https://nanti.jisuanke.com/t/30994 Dlsj is competing in a contest wi ...
- 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 ...
- ACM-ICPC 2018 焦作赛区网络预赛 L 题 Poor God Water
God Water likes to eat meat, fish and chocolate very much, but unfortunately, the doctor tells him t ...
- 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 ...
- 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, ...
- ACM-ICPC 2018 南京赛区网络预赛 - L Magical Girl Haze (分层迪杰斯特拉)
题意:N个点,M条带权有向边,求可以免费K条边权值的情况下,从点1到点N的最短路. 分析:K<=10,用dist[i][j]表示从源点出发到点i,免费j条边的最小花费.在迪杰斯特拉的dfs过程中 ...
- ACM-ICPC 2018 南京赛区网络预赛 L && BZOJ 2763 分层最短路
https://nanti.jisuanke.com/t/31001 题意 可以把k条边的权值变为0,求s到t的最短路 解析 分层最短路 我们建立k+1层图 层与层之间边权为0,i 向 i+1层转 ...
随机推荐
- Code First NotMapped
转载:http://www.cnblogs.com/libingql/p/3352058.html 不需要映射的字段,添加 NotMapped 6.非数据库字段属性 在类中,如果有一些属性不需要映射到 ...
- 12 Zabbix Item类型之Zabbix JMX类型
点击返回:自学Zabbix之路 12 Zabbix Item类型之Zabbix JMX类型 JMX 全称是Java Management Extensions,即Java管理扩展.Java程序会开放一 ...
- 姿态角(Euler角):yaw pitch roll
姿态角(Euler角):yaw pitch roll
- 【Code Chef】April Challenge 2019
Subtree Removal 很显然不可能选择砍掉一对有祖先关系的子树.令$f_i$表示$i$子树的答案,如果$i$不被砍,那就是$a_i + \sum\limits_j f_j$:如果$i$被砍, ...
- 洛谷 P1158 导弹拦截(不是那个DP) 解题报告
P1158 导弹拦截 题目描述 经过1111年的韬光养晦,某国研发出了一种新的导弹拦截系统,凡是与它的距离不超过其工作半径的导弹都能够被它成功拦截.当工作半径为0时,则能够拦截与它位置恰好相同的导弹. ...
- python操作oracle实战
import cx_Oracle conn = cx_Oracle.connect('ua_test/ua_test@192.32.98.15/oracledb') cur1 = conn.curso ...
- luogu2279 消防局的设立 (贪心)
按点的深度从大到小排序,每次取出深度最大的那个点,如果它还没被覆盖,就在它爷爷上放一个消防局,这样一定是最优的 为了判定是否被覆盖,可以记录从某点的子树中到这个点的最近消防局的距离dis[](如果没有 ...
- DataFrame 数据去重
df.head() >>> Price Seqno Symbol time 0 1623.0 0.0 APPL 1473411962 1 1623.0 0.0 APPL 147341 ...
- mathML如何在谷歌浏览器进行展示
前几天不是做了个word公式的解析吗,就是office插入的公式是个xmlObject对象,读出来就是个String,所以要进行转换才能在网页上展示,其实我对这方面也不是很了解,然后各种百度解决方案, ...
- (转)Spring文件上传,包括一次选中多个文件
背景: http://www.cnblogs.com/lixuwu/p/8495275.html已经实现了单文件的上传和下载,多文件的上传是另一种情景,这里记录下来 实现过程 先说前台. 运行以后就是 ...