传送门

完了我好像连分层图最短路都不会了……果然还是太菜了……

具体来说就是记录一个步数表示免费了几条边,在dijkstra的时候以步数为第一关键字,距离为第二关键字。枚举边的时候分别枚举免不免费下一条边。然后其他基本就和普通的dijkstra一样了

据说这题卡spfa,特意把刚写好的spfa给改了(很懵逼为啥写spfa全T,我写挂了?)

  1. //minamoto
  2. #include<iostream>
  3. #include<cstdio>
  4. #include<queue>
  5. #include<cstring>
  6. using namespace std;
  7. #define getc() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++)
  8. char buf[<<],*p1=buf,*p2=buf;
  9. inline int read(){
  10. #define num ch-'0'
  11. char ch;bool flag=;int res;
  12. while(!isdigit(ch=getc()))
  13. (ch=='-')&&(flag=true);
  14. for(res=num;isdigit(ch=getc());res=res*+num);
  15. (flag)&&(res=-res);
  16. #undef num
  17. return res;
  18. }
  19. const int N=,M=,K=;
  20. struct node{
  21. int x,cnt,dis;
  22. node(){}
  23. node(int x,int cnt,int dis):x(x),cnt(cnt),dis(dis){}
  24. inline bool operator <(const node b)const
  25. {return cnt!=b.cnt?cnt>b.cnt:dis>b.dis;}
  26. };
  27. priority_queue<node> q;
  28. int vis[N][K],dis[N][K];
  29. int head[N],Next[M],ver[M],edge[M],tot;
  30. int n,m,k;
  31. inline void add(int u,int v,int e){
  32. ver[++tot]=v,Next[tot]=head[u],head[u]=tot,edge[tot]=e;
  33. ver[++tot]=u,Next[tot]=head[v],head[v]=tot,edge[tot]=e;
  34. }
  35. void dijkstra(){
  36. memset(dis,0x3f,sizeof(dis));
  37. memset(vis,,sizeof(vis));
  38. q.push(node(,,)),dis[][]=;
  39. while(!q.empty()){
  40. int u=q.top().x,cnt=q.top().cnt;q.pop();
  41. if(vis[u][cnt]) continue;
  42. vis[u][cnt]=;
  43. for(int i=head[u];i;i=Next[i]){
  44. int v=ver[i];
  45. if(dis[v][cnt]>dis[u][cnt]+edge[i]){
  46. dis[v][cnt]=dis[u][cnt]+edge[i];
  47. q.push(node(v,cnt,dis[v][cnt]));
  48. }
  49. if(cnt+<=k&&dis[v][cnt+]>dis[u][cnt]){
  50. dis[v][cnt+]=dis[u][cnt];
  51. q.push(node(v,cnt+,dis[v][cnt+]));
  52. }
  53. }
  54. }
  55. }
  56. int main(){
  57. // freopen("testdata.in","r",stdin);
  58. n=read(),m=read(),k=read();
  59. for(int i=,u,v,e;i<=m;++i)
  60. u=read(),v=read(),e=read(),add(u,v,e);
  61. dijkstra();
  62. printf("%d\n",dis[n][k]);
  63. return ;
  64. }

P2939 [USACO09FEB]改造路Revamping Trails(分层图最短路)的更多相关文章

  1. P2939 [USACO09FEB]改造路Revamping Trails

    P2939 [USACO09FEB]改造路Revamping Trails 同bzoj2763.不过dbzoj太慢了,bzoj又交不了. 裸的分层图最短路. f[i][j]表示免费走了j条路到达i的最 ...

  2. 洛谷 P2939 [USACO09FEB]改造路Revamping Trails 题解

    P2939 [USACO09FEB]改造路Revamping Trails 题目描述 Farmer John dutifully checks on the cows every day. He tr ...

  3. 洛谷P2939 [USACO09FEB]改造路Revamping Trails(最短路)

    题目描述 Farmer John dutifully checks on the cows every day. He traverses some of the M (1 <= M <= ...

  4. LUOGU P2939 [USACO09FEB]改造路Revamping Trails

    题意翻译 约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小径,使之成为高 ...

  5. 洛谷P2939 [USACO09FEB]改造路Revamping Trails

    题意翻译 约翰一共有\(N\))个牧场.由\(M\)条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场\(1\)出发到牧场\(N\)去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰 ...

  6. 洛谷 P2939 [USACO09FEB]改造路Revamping Trails

    题意翻译 约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小径,使之成为高 ...

  7. [USACO09FEB]改造路Revamping Trails 分层最短路 Dijkstra BZOJ 1579

    题意翻译 约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小径,使之成为高 ...

  8. 【luogu P2939 [USACO09FEB]改造路Revamping Trails】 题解

    题目链接:https://www.luogu.org/problemnew/show/P2939 本来说是双倍经验题,跟飞行路线一样的,结果我飞行路线拿deque优化SPFA过了这里过不了了. 所以多 ...

  9. 分层图【p2939】[USACO09FEB]改造路Revamping Trails

    Description 约翰一共有N)个牧场.由M条布满尘埃的小径连接.小径可 以双向通行.每天早上约翰从牧场1出发到牧场N去给奶牛检查身体. 通过每条小径都需要消耗一定的时间.约翰打算升级其中K条小 ...

随机推荐

  1. poj3352 边-双联通分量

    题意:给一个无向图,问最少加几条边变成边-双联通 题解:求一次双联通,缩点,这样就变成了一棵树,结果就是(树上的叶子节点+1)/2,叶子节点可以通过入度判断 #include<map> # ...

  2. BEC listen and translation exercise 35

    高中听力: At five o'clock, we have afternoon tea, but we don't have it in the kitchen. Father's Day is t ...

  3. leetcode 258. Add Digits(数论)

    Given a non-negative integer num, repeatedly add all its digits until the result has only one digit. ...

  4. 【leetcode刷题笔记】LRU Cache

    Design and implement a data structure for Least Recently Used (LRU) cache. It should support the fol ...

  5. LG3533 [POI2012]RAN-Rendezvous

    2791: [Poi2012]Rendezvous Time Limit: 25 Sec  Memory Limit: 128 MBSubmit: 259  Solved: 160[Submit][S ...

  6. tcpdump示例

    今天有需求要用tcpdump,给一个我使用的例子: sudo /usr/sbin/tcpdump  dst 10.20.137.24 and tcp port 8080 -A -s0  -w nous ...

  7. poj 1637 Sightseeing tour —— 最大流+欧拉回路

    题目:http://poj.org/problem?id=1637 建图很妙: 先给无向边随便定向,这样会有一些点的入度不等于出度: 如果入度和出度的差值不是偶数,也就是说这个点的总度数是奇数,那么一 ...

  8. POJ 1042 Gone Fishing( DP )

    题意:小明打算做一个h((1 <= h <= 16))个小时钓鱼旅行.发现这里有n(2 <= n <= 25)个湖,而且所有的湖都在一条路的旁边.小明打算从第1个湖开始钓起,每 ...

  9. CentOS 7关闭firewalld启用iptables

    在CentOS7中,有很多CentOS 6中的常用服务发生了变化. 其中iptables是其中比较大的一个.防火墙iptables被firewalld取代. 本文将介绍,如果采用systemctl关闭 ...

  10. POJ百练—IP地址转换

    #include<iostream> #include<cstdio> #include<cstring> using namespace std; ]; void ...