ZOJ 2770 Burn the Linked Camp(spfa&&bellman)
- //差分约束 >=求最长路径 <=求最短路径 结果都一样
//spfa
#include<stdio.h>- #include<string.h>
- #include<limits.h>
- #include<queue>
- using namespace std;
- #define N 1010
- #define M 1010*1010//注意边和点集的数组大小
- struct edge
- {
- int to,value,next;
- };
- struct edge edges[M];
- int heads[N],len=;
- int dis[N];
- int addedge(int u,int v,int w)
- {
- edges[len].to=v,edges[len].value=w,edges[len].next=heads[u];
- heads[u]=len++;
- return ;
- }
- int n,m;
- int spfa(int v)
- {
- queue<int> q;
- int inqueue[N];
- memset(inqueue,,sizeof(inqueue)),inqueue[v]=;
- q.push(v);
- for(int i=;i<=n;i++) dis[i]=INT_MIN;
- dis[v]=;
- int times[N];
- memset(times,,sizeof(times)),times[v]=;
- int temp=;
- while(!q.empty()){
- int x=q.front();
- q.pop();
- inqueue[x]=;
- for(int i=heads[x];i!=-;i=edges[i].next){
- int to=edges[i].to,value=edges[i].value;
- if(value+dis[x]>dis[to]){
- dis[to]=value+dis[x];
- if(!inqueue[to]){ //注意已经在队列里面的不用再加入队列
- inqueue[to]=,q.push(to);
- times[to]++;
- if(times[x]>n){
- return -;//返回值有可能是0 不能将0作为区别的标记
- }
- }
- }
- }
- }
- return dis[n];
- }
- int main(void)
- {
- int i,num;
- while(scanf("%d%d",&n,&m)!=EOF){
- len=;
- memset(heads,-,sizeof(heads));
- for(i=;i<=n;i++){
- scanf("%d",&num);
- addedge(i,i-,-num);
- addedge(,i,);
- }
- for(i=;i<=m;i++){
- int u,v,w;
- scanf("%d%d%d",&u,&v,&w);
- addedge(u-,v,w);
- }
- int h=spfa();
- if(h!=-) printf("%d\n",h);
- else printf("Bad Estimations\n");
- }
- return ;
- }
//bellman
- #include <iostream>
- #include <stdio.h>
- #include <string.h>
- using namespace std;
- #define INF 2000000000
- int u[12005],v[12005],w[12005],n,m,total,d[1005];
- void Edge(int s,int e,int val){
- u[total]=s;
- v[total]=e;
- w[total++]=val;
- }
- int Bellman(){
- int i,e;
- for(i=1;i<=n;i++) d[i]=-INF;
- d[0]=0;
- for(i=1;i<=n;i++){
- for(e=0;e<total;e++){
- if(d[v[e]]<d[u[e]]+w[e])
- d[v[e]]=d[u[e]]+w[e];
- }
- }
- int ans=d[n];
- for(e=0;e<total;e++)
- if(d[v[e]]<d[u[e]]+w[e]) ans=-1;
- return ans;
- }
- int main(){
- int a,b,c,cnt,i;
- while(scanf("%d%d",&n,&m)!=EOF){
- total=0;
- for(i=1;i<=n;i++){
- scanf("%d",&c);
- Edge(0,i,0);
- Edge(i,i-1,-c);
- }
- for(i=0;i<m;i++){
- scanf("%d%d%d",&a,&b,&c);
- Edge(a-1,b,c);
- }
- cnt=Bellman();
- for(i=0;i<n;i++) printf("%d ",d[i]);
- puts("");
- if(cnt==-1) cout<<"Bad Estimations\n";
- else cout<<cnt<<"\n";
- }
- return 0;
- }
ZOJ 2770 Burn the Linked Camp(spfa&&bellman)的更多相关文章
- ZOJ 2770 Burn the Linked Camp 差分约束
链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do? problemCode=2770 Burn the Linked Camp Time Limi ...
- ZOJ 2770 Burn the Linked Camp 差分约束 ZOJ排名第一~
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=1770 题目大意: 陆逊为了火烧连营七百里,派出了间谍刺探敌情,得之刘备的军营以 ...
- zoj 2770 Burn the Linked Camp
今天刚刚学差分约束系统.利用最短路求解不等式.世界真的好奇妙!感觉不等式漏下几个会导致WA!! #include<cstdio> #include<cstring> #incl ...
- zoj 2770 Burn the Linked Camp (差分约束系统)
// 差分约束系统// 火烧连营 // n个点 m条边 每天边约束i到j这些军营的人数 n个兵营都有容量// Si表示前i个军营的总数 那么 1.Si-S(i-1)<=C[i] 这里 建边(i- ...
- Burn the Linked Camp(bellman 差分约束系统)
Burn the Linked Camp Time Limit: 2 Seconds Memory Limit: 65536 KB It is well known that, in the ...
- zoj Burn the Linked Camp (查分约束)
Burn the Linked Camp Time Limit: 2 Seconds Memory Limit: 65536 KB It is well known that, in the ...
- ZOJ2770 Burn the Linked Camp(差分约束系统)
区间和一定要联系到前缀和. 这题,把前缀和看作点,从s0到sn: 对于每一个营地i的容量capi,有这么个关系si-si-1<=capi: 对于每一个区间的评估i,j,k,有sj-si-1> ...
- zoj2770 Burn the Linked Camp --- 差分约束
有n个营地,每一个营地至多容纳Ci人.给出m个条件:第i到第j个营地之间至少有k人. 问n个营地总共至少有多少人. 此题显然差分约束.要求最小值.则建立x-y>=z方程组,建图求最长路. 用d[ ...
- ZOJ 2770 差分约束+SPFA
Burn the Linked Camp Time Limit: 2 Seconds Memory Limit: 65536 KB It is well known that, in the ...
随机推荐
- 什么是位、字节、字、KB、MB
什么是位.字节.字.KB.MB 位:"位(bit)"是电子计算机中最小的数据单位.每一位的状态只能是0或1. 字节:8个二进制位构成1个"字节(Byte)",它 ...
- linux----命令替换
0.命令替换.它的大概意思是.命令在脚本中只起一个站位符的作用:在命令运行时它会被命令自己的执行结果所替换. 1.使用格式: 1.$(command) 2.`command` 2.使用举例: 1.:打 ...
- android ViewHolder 使用
android中使用ListView ExpandableListView 数据适配器adapter很多都是自己定义,自己定义数据适配器时,要重写getView.重写getView为了不让每次调 ...
- SD和SDHC和SDXC卡的区别是什么
SD卡,SDHC卡,SDXC卡区别在规格不一样,SD卡最大支持2GB容量,SDHC 最大支持32GB容量,SDXC 最大支持2TB(2048GB)容量,支持SDXC卡的数码设备是兼容支持SD卡与SDH ...
- 调bug时候应该提高思维深度(多问二十个为什么)
版权声明:本文为博主原创文章,未经博主允许不得转载. (一)关于思维深度 读书时 有的人做一份卷子有一份卷子的收获 有的人做100张卷子只有一份卷子的收获 写代码时 有的人调一个Bug可以收获多方面的 ...
- Mongodb入门并使用java操作Mongodb
转载请注意出处:http://blog.csdn.net/zcm101 最近在学习NoSql,先从Mongodb入手,把最近学习的总结下. Mongodb下载安装 Mongodb的下载安装就不详细说了 ...
- python-面向对象(二)
面向对象总结 面向对象是一种编程方式,此编程方式的实现是基于对 类 和 对象 的使用 类 是一个模板,模板中包装了多个“函数”供使用(可以讲多函数中公用的变量封装到对象中) 对象,根据模板创建的实例( ...
- Java操作mongoDB2.6的常见API使用方法
对于mongoDB而言,学习方式和学习关系型数据库差不太多 開始都是学习怎样insert.find.update.remove,然后就是分页.排序.索引,再接着就是主从复制.副本集.分片等等 最后就是 ...
- CRM需要注意的一些事,修改字段类型
crm字段类型如果变了,比如文本类型变为查找类型,要新建命名跟原来不一样,千万不能删除以前的字段再建原来的一样的,那样如果导到正式系统会造成无法导入,执行sql失败, 切记切记.可以字段名后加2,或者 ...
- sql server 2000 对应 sql server 2005的row_number()、rank()、DENSE_RANK( )、ntile( )等用法
转自CSDN:http://blog.csdn.net/htl258/article/details/4006717 SQL server 2005新增的几个函数,分别是row_number( ).r ...