链接:http://cogs.pro/cogs/problem/problem.php?pid=1000

题意:有n个点,每一秒钟会从黑变白或从白变黑,黑到白额外费体力,白到黑省体力,还可以停在某个点,停白点不费体力,停黑点费体力,求到n点最省体力的多少。

初看这道题我们可能会被琐碎的情况搞晕,但是我们仔细观察可以发现:每一个点只有黑点白点两种情况,而且黑点之后一定是白点,白点之后一定是黑点,奇数秒颜色一样,偶数秒颜色一样。

因此思路便可得出:把每个点拆成奇数秒的点和偶数秒的点,每个点建边时只建下一秒到的点,停在本点就是奇点到偶点,偶点到奇点。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 #include<cstring>
 5 using namespace std;
 6 const int maxn=5005,maxm=30005;
 7 int n,m,dis[maxn<<1],id[maxn<<1],wei[maxn<<1];
 8 struct node
 9 {
10     int from,to,weight,next;
11 }edge[(maxm<<1)+maxn];
12 int head[maxn<<1],tot;
13 void addedge(int u,int v,int w)
14 {
15     edge[++tot]=(node){u,v,w,head[u]};head[u]=tot;
16 }
17 #include<queue>
18 bool inq[maxn<<1];
19 void SPFA()
20 {
21     memset(dis,0x3f,sizeof(dis));
22     dis[1]=0;
23     queue<int>q;q.push(1);
24     inq[1]=1;
25     while(!q.empty())
26     {
27         int k=q.front();q.pop();inq[k]=0;
28         for(int i=head[k];i;i=edge[i].next)
29         {
30             int v=edge[i].to;
31             if(dis[v]>dis[k]+edge[i].weight)
32             {
33                 dis[v]=dis[k]+edge[i].weight;
34                 if(!inq[v])
35                 {
36                     inq[v]=1;
37                     q.push(v);
38                 }
39             }
40         }
41     }
42 }
43 int haha()
44 {
45     freopen("suika.in","r",stdin);
46     freopen("suika.out","w",stdout);
47     scanf("%d%d",&n,&m);
48     for(int i=1;i<=n;i++)
49     {
50         int x;scanf("%d",&x);
51         id[(i<<1)-1]=x;id[(i<<1)]=x^1;
52     }
53     for(int i=1;i<=n;i++)
54     {
55         scanf("%d",&wei[(i<<1)]);
56         wei[(i<<1)-1]=wei[(i<<1)];
57     }
58     for(int i=1;i<=n;i++)
59     {
60         int x;scanf("%d",&x);
61         if(id[(i<<1)])
62         {
63             addedge(i<<1,(i<<1)-1,x);
64             addedge((i<<1)-1,i<<1,0);
65         }
66         else
67         {
68             addedge(i<<1,(i<<1)-1,0);
69             addedge((i<<1)-1,i<<1,x);
70         }
71     }
72     for(int i=1;i<=m;i++)
73     {
74         int u,v,w;scanf("%d%d%d",&u,&v,&w);
75         if(id[(u<<1)]&&!id[(v<<1)])
76         {
77             addedge(u<<1,(v<<1)-1,w+abs(wei[(u<<1)]-wei[(v<<1)]));
78             addedge((u<<1)-1,v<<1,max(w-abs(wei[(u<<1)]-wei[(v<<1)]),0));
79         }
80         else if(!id[(u<<1)]&&id[(v<<1)])
81         {
82             addedge(u<<1,(v<<1)-1,max(w-abs(wei[(u<<1)]-wei[(v<<1)]),0));
83             addedge((u<<1)-1,v<<1,w+abs(wei[(u<<1)]-wei[(v<<1)]));
84         }
85         else
86         {
87             addedge(u<<1,(v<<1)-1,w);
88             addedge((u<<1)-1,v<<1,w);
89         }
90     }
91     SPFA();
92     printf("%d\n",min(dis[(n<<1)-1],dis[(n<<1)]));
93 }
94 int sb=haha();
95 int main(){;}

cogs 1000

转载于:https://www.cnblogs.com/Loser-of-Life/p/7237419.html

cogs1000 伊吹萃香 二维最短路相关推荐

  1. POJ 1724 二维费用最短路

    题目大意: 有N个城市,编号1-N 有R条路,每条路(单向)的起点为Si,终点为Di,长度为Li,如果要走这条路需要花Ti的钱 现在你只有K元钱,求在不超支的前提下,从1走到N需要的最短距离 这里总是 ...

  2. POJ1722二维spfa+优先队列优化

    题意:      给你一个有向图,然后求从起点到终点的最短,但是还有一个限制,就是总花费不能超过k,也就是说每条边上有两个权值,一个是长度,一个是花费,求满足花费的最短长度. 思路:       一开 ...

  3. 二维稳态热传导 代码实现_博世壁挂炉发生故障代码及处理办法

    博世bosch是来自德国的知名壁挂炉品牌,由于其出色的工艺技术,故障在同类产品中属于较低一类,国内业主普遍反映较好.那么,假如我们家里的博世燃气壁挂炉出现故障代码时,该如何解决呢?这里为大家就博世壁挂 ...

  4. 如何将二维数组作为函数的参数传递

    如何将二维数组作为函数的参数传递 声明: 如果你是得道的大侠,这篇文章可能浪费你的时间,如果你坚持要看,我当然感觉很高 兴,但是希望你看完了别骂我!如果你发现我这篇文章有错误的话,你可以提出批评以及 ...

  5. Jetson Nano 从入门到实战(转载)(案例:Opencv配置、人脸检测、二维码检测)

    目录 1. Jetson Nano简介 2. Jetson Nano环境配置 2.1 开箱配件介绍 2.2 烧录系统 2.3 开机和基本设置 2.4 开发环境配置 2.4.1 更新源和软件 2.4.2 ...

  6. Jetson Nano 从入门到实战(案例:Opencv配置、人脸检测、二维码检测)

    目录 1. Jetson Nano简介 2. Jetson Nano环境配置 2.1 开箱配件介绍 2.2 烧录系统 2.3 开机和基本设置 2.4 开发环境配置 2.4.1 更新源和软件 2.4.2 ...

  7. 爱情之路(二维spfa)

    爱情之路 题目描述: yh非常想念他的女朋友小y,于是他决定前往小y所在的那块大陆. 小y所在的大陆共有n个城市,m条双向路,每条路连接一个或两个城市.经过一条路ei需要耗费时间ti.此外,每条路均有 ...

  8. 用Direct3D设计二维横版过关动作类游戏的角色运动(双倍速、二段跳)

    用Direct3D设计二维横版过关动作类游戏的角色运动 演示程序下载地址:http://download.csdn.net/detail/jiangcaiyang123/4278008 虽然大家使用D ...

  9. 条形码?二维码?生成、解析都在这里!

    二维码生成与解析 一.生成二维码 二.解析二维码 三.生成一维码 四.全部的代码 五.pom依赖 直接上代码: 一.生成二维码 public class demo {private static fi ...

最新文章

  1. 芯片项目烂尾怎么办?国家发改委回应了!
  2. CTFshow php特性 web135
  3. 6-PSCI Power Domain Tree Structure
  4. 命名规范(1)大小写约定
  5. [LOJ3153] 三级跳(单调栈 + 线段树)
  6. Python学习之类和实例
  7. 今天你的静态变量和静态代码块执行了吗?
  8. overleaf创建表格
  9. Unix环境高级编程 centos中配置apue编译环境
  10. Retrofit2源码解析(一)
  11. 6. PHP之适配器模式
  12. TatukGIS - GisDefs - CanonicalSQLName 函数
  13. 短文本相似度比较:simHash简介以及java实现
  14. svn提交报错Previous operation has not finished; run 'cleanup' if it was interrupted
  15. android代码设置digits,andorid editext android:digits=abcdefghijklmnopqrstuvwxyz用代码写来控制规则该怎么写呢?...
  16. sublime中PyV8问题
  17. “放管服”改革背景下公安车驾管业务办理情况调研
  18. 医学图像处理常用的看图软件介绍及使用(RadiAnt DICOM Viewer、ITK-Snap和3D Slicer)
  19. hexo史上最全搭建教程(转载)
  20. WINCC做OPC UA服务器与第三方客户端连接测试

热门文章

  1. RM文件解析之RM文件格式
  2. GXT3.X的CheckBoxListView
  3. 转行学java好吗_转行学Java开发怎么样?
  4. 卓岚ZLAN串口服务器的配置及应用
  5. 区块链大本营的定位宣言——让区块链回归技术和应用的本质
  6. 解决div宽度设置width:100%后再设置padding或margin超出父元素的办法
  7. ip地址、域名、DNS、URL的区别与联系
  8. sql~~~~~~~~
  9. POI(excel) - WorkBook和Sheet
  10. 解决mybatis java.sql.SQLNonTransientConnectionException: Public Key Retrieval is not allowed