第一次面对建模的图,也映照了我以前想的算法不是重点,问题的转化才是重点

Description:

  N个任务,M台机器,对于每一个任务有p,s,e表示该任务要做p个时长,要从[s,……)开始,从(……e]结束,问你这些任务最后能完成吗Yes || No

Solution:

  做的是最大流专辑,知道是最大流的题目,但是就是不知道怎么转化为最大流的问题。。。

  Yes or No的关键就是最大流能否等于任务总时长,面对这个题,对于每一个任务 i ,从源点到i添加一条边,边的权值(容量)是对应任务的p,如果yes是不是从s流出的量 fmax == sum(p),假设这些流量流到了任务,那么任务如何处理呢,就是看看时间段如何分配,因为可以任意时间段开始,暂停直到结束所以每个任务与它对应的每一个时间段都要添加一个1(容量),不管这个任务咋分配,只要能分配给它的p就行了,那分配好时间段了呢,是不是还有一个条件也就是机器数目,同一个时间最多m个机器工作,所以每一个时间段,都要向汇点T,传入一个m的容量,表示的意义也很明显啦,最后求出最大流就好了!真舒服,第一次懂一类题的感觉应该都是这样的吧略略略

要注意一下,最多有多少边哈·

#include <iostream>
#include <cstdio>
#include <string.h>
#include <queue>
#include <cmath>
#include <algorithm> #define inf (1 << 28)
using namespace std;
typedef long long ll;
const int maxn = 5000;
const int maxm = 251000+7;
int n,m;
int S,T;
struct node{
int pre;
int to,cost;
}e[maxm<<1];
int id[maxn],cnt;
int flor[maxn]; int cur[maxn];//DFS的优化遍历 void add(int from,int to,int cost)
{
e[cnt].to = to;
e[cnt].cost = cost;
e[cnt].pre = id[from];
id[from] = cnt++;
swap(from,to);
e[cnt].to = to;
e[cnt].cost = 0;
e[cnt].pre = id[from];
id[from] = cnt++;
} int bfs(int s,int t)
{
memset(flor,0,sizeof(flor));
queue < int > q;
while(q.size())q.pop();
flor[s] = 1;
q.push(s); while(q.size())
{
int now = q.front();
q.pop();
for(int i = id[now];~i;i=e[i].pre)
{
int to = e[i].to;
int cost = e[i].cost;
if(flor[to] == 0 && cost > 0)
{
flor[to] = flor[now] + 1;
q.push(to);
if(to == t)return 1;
}
}
}
return 0;
}
int dfs(int s,int t,int value)
{
//ret表示目前流到s的最大流量,用来计算回溯的时候是否还有可行流
int ret = value;
if(s == t || value == 0)return value; int a; for(int &i = cur[s];~i;i = e[i].pre)
{
int to = e[i].to;
int cost = e[i].cost;
if(flor[to] == flor[s] + 1 && (a = dfs(to,t,min(ret,cost))))
{
e[i].cost -= a;
e[i^1].cost += a;
ret -= a;
if(ret == 0)break;
}
}
//s点后面没有可行的流了
if(ret == value) flor[s] = 0;
return value - ret;
}
int dinic(int s,int t)
{
ll ret = 0;
while(bfs(s,t))
{
memcpy(cur,id,sizeof(id));
ret += dfs(s,t,inf);
}
return ret;
}
void init()
{
memset(id,-1,sizeof(id));
cnt = 0;
}
int main()
{
int t;
scanf("%d",&t);
int cas = 0;
while(t--)
{
scanf("%d%d",&n,&m);
init();
int p,s,e;
int tl = -1,tr = -1;
S = 0;
int sump = 0;
for(int i = 1;i <= n;++i)
{
scanf("%d%d%d",&p,&s,&e);
sump += p;
add(S,i,p);
if(tl == -1)tl = s;
if(tr == -1)tr = e;
tl = min(tl,s);
tr = max(tr,e); for(int j = s;j <= e;++j)
{
add(i,n+j,1);
}
}
T = n + tr + 1;
for(int i = tl;i <= tr;++i)
{
add(n + i,T,m);
}
ll ret = dinic(S,T);
printf("Case %d: %s\n\n",++cas,ret == sump ? "Yes" : "No");
}
return 0;
}

HDU3572构造图的模型的更多相关文章

  1. PGM:概率图模型Graphical Model

    http://blog.csdn.net/pipisorry/article/details/51461878 概率图模型Graphical Models简介 完全通过代数计算来对更加复杂的模型进行建 ...

  2. 学习笔记CB014:TensorFlow seq2seq模型步步进阶

    神经网络.<Make Your Own Neural Network>,用非常通俗易懂描述讲解人工神经网络原理用代码实现,试验效果非常好. 循环神经网络和LSTM.Christopher ...

  3. RNN、LSTM、Seq2Seq、Attention、Teacher forcing、Skip thought模型总结

    RNN RNN的发源: 单层的神经网络(只有一个细胞,f(wx+b),只有输入,没有输出和hidden state) 多个神经细胞(增加细胞个数和hidden state,hidden是f(wx+b) ...

  4. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  5. ASP.NET Core MVC/WebAPi 模型绑定探索

    前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...

  6. ASP.NET路由模型解析

    大家好,我又来吹牛逼了 ~-_-~ 转载请注明出处:来自吹牛逼之<ASP.NET路由模型解析> 背景:很多人知道Asp.Net中路由怎么用的,却不知道路由模型内部的运行原理,今天我就给大家 ...

  7. 高性能IO模型浅析

    高性能IO模型浅析 服务器端编程经常需要构造高性能的IO模型,常见的IO模型有四种: (1)同步阻塞IO(Blocking IO):即传统的IO模型. (2)同步非阻塞IO(Non-blocking  ...

  8. 探索ASP.NET MVC5系列之~~~4.模型篇---包含模型常用特性和过度提交防御

    其实任何资料里面的任何知识点都无所谓,都是不重要的,重要的是学习方法,自行摸索的过程(不妥之处欢迎指正) 汇总:http://www.cnblogs.com/dunitian/p/4822808.ht ...

  9. 隐马尔科夫模型python实现简单拼音输入法

    在网上看到一篇关于隐马尔科夫模型的介绍,觉得简直不能再神奇,又在网上找到大神的一篇关于如何用隐马尔可夫模型实现中文拼音输入的博客,无奈大神没给可以运行的代码,只能纯手动网上找到了结巴分词的词库,根据此 ...

随机推荐

  1. sublime 注释模版插件DocBlockr的使用

    一.gihub地址 https://github.com/spadgos/sublime-jsdocs/ 其中有使用的教程可以参考 二.配置示例 安装教程此处略,请自行查找教程 jsdocs_extr ...

  2. PAT 1050 螺旋矩阵(25)(代码)

    1050 螺旋矩阵(25)(25 分) 本题要求将给定的N个正整数按非递增的顺序,填入"螺旋矩阵".所谓"螺旋矩阵",是指从左上角第1个格子开始,按顺时针螺旋方 ...

  3. PAT 1080 MOOC期终成绩(25)(STL-map及multiset+思路+测试点分析)

    1080 MOOC期终成绩(25 分) 对于在中国大学MOOC(http://www.icourse163.org/ )学习"数据结构"课程的学生,想要获得一张合格证书,必须首先获 ...

  4. spring+mybatis+mina+logback框架搭建

    第一次接触spring,之前从来没有学过spring,所以算是赶鸭子上架,花了差不多一个星期来搭建,中间遇到各种各样的问题,一度觉得这个框架搭建非常麻烦,没有一点技术含量,纯粹就是配置,很低级!但随着 ...

  5. BZOJ1088或洛谷2327 [SCOI2005]扫雷

    BZOJ原题链接 洛谷原题链接 很容易发现答案就只有\(0,1,2\)三种答案,而且只要知道第一个格子是否有雷就可以直接顺推下去了. 所以我们跑一次首位有雷,跑一次首位无雷判断是否可行即可. #inc ...

  6. 在 Ubuntu 上使用微信客户端

    原文地址: http://www.myzaker.com/article/5979115d1bc8e08c30000071/ 在这个快速信息交互时代,无论是工作还是生活,都需要频繁的网络社交,而在中国 ...

  7. ubuntu下为单个网卡配置多个ip

    参考文档: https://www.jb51.net/os/Ubuntu/418951.html https://blog.csdn.net/ying1989920/article/details/4 ...

  8. 《C#从现象到本质》读书笔记(二)第2章 C#类型基础(上)

    <C#从现象到本质>读书笔记第二篇 第2章 C#类型基础(上) 类型指的是集合{类,结构,接口,枚举,委托}中的任意一个成员.任何拥有某类型的值(value)称为某类型的一个实例(inst ...

  9. XML 解析的两种方法

    申请博客有一段时间了,一直没有写些什么,今天写一下被遗忘的 xml,因为 ios 现在一般都用 JSON,但毕竟还有一部分老一些的服务器还会有 xml xml 格式的解析方式有两种 1.SAX解析: ...

  10. about CSS3

    1. 1.transition 语法:transition:[ transition-property ] || [ transition-duration ] || [ transition-tim ...