POJ 1275 差分约束
一堆化不等式,,,,,,
懒得写了。。。
请看mars_ch的blog…..
还是她给我找的错……….
//By SiriusRen
#include <queue>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;
int first[25],next[666],v[666],w[666],tot,ans;
int n,cases,have[25],need[25],jy,inq[25],vis[25],dis[25];
void add(int x,int y,int z){w[tot]=z,v[tot]=y,next[tot]=first[x],first[x]=tot++;}
bool spfa(){
queue<int>q;q.push(0);
while(!q.empty()){
int t=q.front();q.pop();
vis[t]++,inq[t]=0;
for(int i=first[t];~i;i=next[i])
if(dis[v[i]]<dis[t]+w[i]){
dis[v[i]]=dis[t]+w[i];
if(!inq[v[i]])inq[v[i]]=1,q.push(v[i]);
if(vis[v[i]]>24)return 0;
}
}
if(dis[24]==ans)return 1;return 0;
}
int main(){
// freopen("data.txt","r",stdin);
scanf("%d",&cases);
while(cases--){
memset(have,0,sizeof(have));
for(int i=1;i<=24;i++)scanf("%d",&need[i]);
scanf("%d",&n);
for(int i=1;i<=n;i++)scanf("%d",&jy),have[jy+1]++;
for(ans=0;ans<=n;ans++){
memset(dis,0xcf,sizeof(dis));memset(vis,0,sizeof(vis));
tot=0,memset(first,-1,sizeof(first)),memset(inq,0,sizeof(inq));
dis[0]=0;
for(int i=1;i<=24;i++)add(i-1,i,0),add(i,i-1,-have[i]);
for(int i=9;i<=24;i++)add(i-8,i,need[i]);
add(0,24,ans);
for(int i=1;i<=8;i++)add(i+16,i,need[i]-ans);
if(spfa()){printf("%d\n",ans);goto end;}
}
puts("No Solution");
end:;
}
}
POJ 1275 差分约束的更多相关文章
- poj 3159(差分约束经典题)
题目链接:http://poj.org/problem?id=3159思路:题目意思很简单,都与给定的条件dist[b]-dist[a]<=c,求dist[n]-dist[1]的最大值,显然这是 ...
- poj Layout 差分约束+SPFA
题目链接:http://poj.org/problem?id=3169 很好的差分约束入门题目,自己刚看时学呢 代码: #include<iostream> #include<cst ...
- poj 1201 差分约束
http://www.cnblogs.com/wangfang20/p/3196858.html 题意: 求集合Z中至少要包含多少个元素才能是每个区间[ai,bi]中的元素与Z中的元素重合个数为ci. ...
- POJ - 3169 差分约束
题意:n头牛,按照编号从左到右排列,两头牛可能在一起,接着有一些关系表示第a头牛与第b头牛相隔最多与最少的距离,最后求出第一头牛与最后一头牛的最大距离是多少,如 果最大距离无限大则输出 ...
- POJ 1201 差分约束+SPFA
思路: 差分约束,难在建图.(我是不会告诉你我刚学会SPFA的...) 把每个区间的ai–>bi连一条长度为ci的边. k–>k+1连一条长度为0的边. k+1–>k连一条长度为-1 ...
- POJ 1201 差分约束(集合最小元素个数)
题意: 给你一个集合,然后有如下输入,a ,b ,c表示在范围[a,b]里面有至少有c个元素,最后问你整个集合最少多少个元素. 思路: 和HDU1384一模一样,首先这个题目可 ...
- poj 1716 差分约束
水水的. 给几个不等式:dis[b]-dis[a]>=2; 0<=dis[i+1]-dis[i]<=1; #include<iostream> #include< ...
- poj 3159 差分约束
思路:班长的糖果要比snoopy的多.并且要用手写堆栈,且堆栈的大小要开到20000000. #include<iostream> #include<cstdio> #incl ...
- poj 1364 差分约束
思路:设dis[i]为从0点到第i点的序列总和.那么对于A B gt k 来讲意思是dis[B+A]-dis[A]>k; 对于A B lt k来讲就是dis[B+A]-dis[A]<k; ...
随机推荐
- nyoj--74--小学生算术(水)
小学生算术 时间限制:3000 ms | 内存限制:65535 KB 难度:1 描述 很多小学生在学习加法时,发现"进位"特别容易出错.你的任务是计算两个三位数在相加时需要多少 ...
- word2010无法显示endnote x7插件及破解endnote x7
最近本人由于要写文章需要使用endnotex7,相比于mendeley和noteexpress,文献管理和引用我喜欢endnote x7,阅读喜欢mendeley.可是由于之前用的正版30天到期了,破 ...
- 基于QMP实现对qemu虚拟机进行交互
本文详解QMP,包含qmp.hmp.qemu-guest-agent的介绍.工作原理.配置方法.范例 小慢哥的原创文章,欢迎转载 目录 ▪ QMP介绍 ▪ QMP语法 ▪ 单独使用qemu,启用QMP ...
- oracle故障处理之删除大表空间hang住
背景 数据库分区表数据越来越大,需要对过期话的数据进行迁移,以及大的分区表需要进行数据的清理和删除,达到释放磁盘空间的目的. 问题说明 环境:linux 6.X 数据库:oracle 11.2.0.4 ...
- SQL语句之Group By
1. Group By 语句简介: Group By语句从英文的字面意义上理解就是“根据(by)一定的规则进行分组(Group)”.它的作用是通过一定的规则将一个数据集划分成若干个小的区域,然后针对若 ...
- BZOJ 4321 DP
思路: 这个DP太神了- 完全没想到 http://blog.csdn.net/geotcbrl/article/details/49663401 //By SiriusRen #include &l ...
- [makefile]如何设置不同目录的代码(.c),生成到指定目录下(./debug/.o))
部分代码跟makefile不在同一目录,有没有好的方法来设置依赖关系,我找到三种方法,但感觉都不完美,下面我会把他列出来并加以说明,不知有没有更好的方法,makefile本身也不是很熟,请大家指教: ...
- vue-cli安装步骤
vue-cli脚手架模板是基于node下的npm来完成安装的所以首先需要安装node 条件: node在4.以上,npm在3以上 安装 指令: 1.npm install -g vue-cli 在全 ...
- Android 制作类似支付圆圈和打钩界面ProgressWheel
首先要说明的是,制作圆圈旋转的效果并不是博主做的,是参照了github上的一个代码,只是在上面添加了修改,对其优化并增加了一个打钩的动画. 先来看下效果,1+的手机获取root权限真是难,没法录屏,只 ...
- Android饼图的简单实现
1.简单的实现效果图: 2.自定义View的实现 package myapplication.com.myapp.view; import android.content.Context; impor ...