NOI2008 志愿者招募

原创 2015年11月20日 22:51:24

题目:http://www.lydsy.com/JudgeOnline/problem.php?id=1061
这可能那年NOI最简单的题了
乍一看是费用流,可是不会连边怎么办
先空着

/**************************************************************
    Problem: 1061
    User: Gvolv
    Language: C++
    Result: Accepted
    Time:1392 ms
    Memory:4792 kb
****************************************************************/

#include<cstdio>
#include<iostream>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<queue>
#define LL long long
#define INF 1000000000
#define eps 1e-10
#define sqr(x) (x)*(x)
#define pa pair<int,int>
#define cyc(i,x,y) for(i=(x);i<=(y);i++)
#define cy2(i,x,y) for(i=(x);i>=(y);i--)
using namespace std;
inline int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=10*x+ch-'0';ch=getchar();}
    return x*f;
}
#define N 100030
int tot=1,n,m,s,t,a[2],head[N],from[N];
int d[N],v[N];
struct Node{
    int from,go,next,v,c;
}e[N];
void addedge(int x,int y,int z,int c)
{
    e[++tot]=(Node){x,y,head[x],z,c};head[x]=tot;
    e[++tot]=(Node){y,x,head[y],0,-c};head[y]=tot;
}
queue<int> q;
int spfa()
{
    for(int i=s;i<=t;i++) d[i]=INF,v[i]=0;
    d[s]=0;v[s]=1;q.push(s);
    while(!q.empty())
    {
        int x=q.front();q.pop();v[x]=0;
        for(int i=head[x],y;i;i=e[i].next)
         if(e[i].v&&d[x]+e[i].c<d[y=e[i].go])
         {
            d[y]=d[x]+e[i].c;from[y]=i;
            if(!v[y]) {v[y]=1;q.push(y);}
         }
    }
    return d[t]!=INF;
}
int mcf()
{
    int mincost=0;
    while(spfa())
    {
        int tmp=INF;
        for(int i=from[t];i;i=from[e[i].from]) tmp=min(tmp,e[i].v);
        mincost+=tmp*d[t];
        for(int i=from[t];i;i=from[e[i].from])e[i].v-=tmp,e[i^1].v+=tmp;
    }
    return mincost;
}
int main()
{
//  freopen("input.in","r",stdin);
//  freopen("output.out","w",stdout);
    int i,x,y,z,o=0;
    n=read(),m=read();
    s=0,t=n+2;
    cyc(i,1,n) 
    {
       a[o^=1]=read();
       if(a[o]-a[o^1]>=0) addedge(s,i,a[o]-a[o^1],0);
       else addedge(i,t,a[o^1]-a[o],0);
       if(i!=1) addedge(i,i-1,INF,0);
    }  
    addedge(n+1,t,a[o],0);
    addedge(n+1,n,INF,0);
    cyc(i,1,m) 
    {
        x=read(),y=read(),z=read();
        addedge(x,y+1,INF,z);
    }
    printf("%d\n",mcf());
    return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

[bzoj1061][NOI2008]志愿者招募

1061: [Noi2008]志愿者招募Time Limit: 20 Sec Memory Limit: 162 MB Submit: 3045 Solved: 1888 [Submit][S...
  • FZHvampire
  • FZHvampire
  • 2016年03月14日 19:45
  • 690

【NOI2008】BZOJ1061志愿者招募

1061: [Noi2008]志愿者招募 Time Limit: 20 Sec Memory Limit: 162 MB Submit: 3028 Solved: 1872 Descript...
  • DCrusher
  • DCrusher
  • 2016年03月12日 15:33
  • 460

BZOJ 1061 [Noi2008]志愿者招募 线性规划

BZOJ 1061 [Noi2008]志愿者招募 线性规划
  • wzq_QwQ
  • wzq_QwQ
  • 2015年08月21日 18:38
  • 1225

BZOJ 1061 Noi2008 志愿者招募 单纯形

题目大意:给定n天,第i天需要ai个志愿者,有m类志愿者,每类志愿者工作时间为[l,r],花费为ci,求最小花费 裸单纯形。。。。。 这里推荐一下wyfcyx的《线性规划与单纯形算法》 http...
  • PoPoQQQ
  • PoPoQQQ
  • 2015年03月16日 19:46
  • 3503

BZOJ1061: [Noi2008]志愿者招募 && 单纯形学习笔记

终于搞完了单纯形,还真不是个简单的东西,但是理解之后,算法挺简单的
  • QWsin
  • QWsin
  • 2017年01月05日 11:40
  • 406

[NOI 2008] 志愿者招募

从这道题学到一种新颖的建模方法。 某些线性规划问题可以归约到网络流解决。...
  • ruoruo_cheng
  • ruoruo_cheng
  • 2016年05月21日 21:30
  • 245

【BZOJ】1061 [Noi2008]志愿者招募 最小费用最大流——预流&填坑

传送门:【BZOJ】1061 [Noi2008]志愿者招募 ti m
  • u013368721
  • u013368721
  • 2014年10月08日 22:03
  • 864

bzoj 1061: [Noi2008]志愿者招募(线性规划+网络流)

Description申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管。布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者。经过估算,这个项目需要N 天才能完成...
  • Time_major
  • Time_major
  • 2016年04月06日 22:00
  • 597

bzoj1061【NOI2008】志愿者招募

网络流+线性规划,思路好
  • AaronGZK
  • AaronGZK
  • 2015年12月18日 23:00
  • 2025

[BZOJ1061] [NOI2008] 志愿者招募 - 最小费用最大流

大部分内容转自: BYVOID - NOI2008 志愿者招募                          如果讲道理的话,就是说我们抽象一下这个模型……然后每条费用边就是连接起始日期...
  • whzzt
  • whzzt
  • 2016年04月05日 23:25
  • 325
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:NOI2008 志愿者招募
举报原因:
原因补充:

(最多只允许输入30个字)