传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=313

试题描述:

WZJ的公司放假了!为了保证假期期间公司的安全,WZJ决定雇佣一些人来看守公司。有M个大学生来应聘,他们想要的工资是Ci元,可以为WZJ从第Si天到Ti天看守公司。WZJ是个决定在花钱前提下雇佣一些人,使得从第1天到第N天都至少有一个人看守公司,你能帮帮他吗(若无解输出"No Answer.")?

输入:

第一行为两个正整数N,M。
第二行至第M+1行第i+1行为3个正整数Si、Ti、Ci。

输出:

输出WZJ最少花的钱数(若无解输出"No Answer.")。

输入示例:

5 4
1 2 3
2 4 1
4 5 2
1 5 8

输出示例:

6

其他说明:

1<=N,M<=100000
1<=Si<=Ti<=N
1<=Ci<=2000
线段树练习题

题解:先想到将每一天抽象成点,来一个(L,R)的人就添一条边L->R+1权值为工资,然后跑一遍最短路貌似就搞定了

                     ---------当然没搞定了啊,比如你让(1,6),(4,8)情何以堪啊,所以先搞一下所有的(i,i-1)权值为0的边就好了.

当然了,此题本来就是要用线段树瞎搞一个背包动规……

最短路:

 #include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<queue>
using namespace std;
const int maxn=+,INF=-1u>>;
struct Tedge{int x,y,w,next;}adj[maxn*];int fch[maxn],ms=;
void AddEdge(int u,int v,int w){
adj[++ms]=(Tedge){u,v,w,fch[u]};fch[u]=ms;return;
}
bool vis[maxn];int dist[maxn],n,m;
void SPFA(){
queue<int>Q;memset(vis,false,sizeof(vis));
for(int i=;i<=n+;i++)dist[i]=INF;dist[]=;
Q.push();vis[]=true;
while(!Q.empty()){
int u=Q.front();Q.pop();vis[u]=false;
for(int i=fch[u];i;i=adj[i].next){
int v=adj[i].y;
if(dist[v]>dist[u]+adj[i].w){
dist[v]=dist[u]+adj[i].w;
if(!vis[v]) vis[v]=true,Q.push(v);
}
}
} return ;
}
inline int read(){
int x=,sig=;char ch=getchar();
while(!isdigit(ch)){if(ch=='-') sig=-;ch=getchar();}
while(isdigit(ch)) x=*x+ch-'',ch=getchar();
return x*=sig;
}
inline void write(int x){
if(x==){putchar('');return;}if(x<) putchar('-'),x=-x;
int len=,buf[];while(x) buf[len++]=x%,x/=;
for(int i=len-;i>=;i--) putchar(buf[i]+'');return;
}
void init(){
n=read();m=read();int a,b,c;
for(int i=n+;i>;i--) AddEdge(i,i-,);
for(int i=;i<=m;i++){
a=read();b=read();c=read();
AddEdge(a,b+,c);//printf("-AddEdge-%d %d %d\n",k,j,c);
} return;
}
void work(){
SPFA();
//for(int i=1;i<=ms;i++)printf("-Edge- %d to %d is %d\n",adj[i].x,adj[i].y,adj[i].w);
//for(int i=1;i<=n+1;i++) printf("dist[%d]=%d\n",i,dist[i]);
return;
}
void print(){
if(dist[n+]>=INF) puts("No Answer.");
else write(dist[n+]),putchar('\n');
return;
}
int main(){
init();work();print();return ;
}
/*
5 3
1 2 3
1 1 5
3 5 6
*/

线段树:

 #include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
const int INF=;
int first[maxn],next[maxn],s[maxn],v[maxn],f[maxn];
int minv[maxn*],ql,qr,x,val;
void update(int o,int L,int R)
{
if(L==R) minv[o]=val;
else
{
int M=L+R>>,lc=o<<,rc=lc|;
if(x<=M) update(lc,L,M);
else update(rc,M+,R);
minv[o]=min(minv[lc],minv[rc]);
}
}
int query(int o,int L,int R)
{
if(ql<=L&&R<=qr) return minv[o];
int M=L+R>>,ans=INF,lc=o<<,rc=lc|;
if(ql<=M) ans=min(ans,query(lc,L,M));
if(qr>M) ans=min(ans,query(rc,M+,R));
return ans;
}
int main()
{
int n,m,a,b,c;
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
s[i]=a; v[i]=c;
next[i]=first[b];
first[b]=i;
}
for(int i=;i<=n*;i++) minv[i]=INF;
update(,,n);
for(int i=;i<=n;i++)
{
f[i]=INF;
for(int j=first[i];j;j=next[j])
{
ql=s[j]-;qr=i-;
f[i]=min(f[i],v[j]+query(,,n));
}
x=i; val=f[i];
if(val!=INF) update(,,n);
}
if(f[n]==INF) puts("No Answer.");
else printf("%d\n",f[n]);
return ;
}

COJ 0343 WZJ的公司(二)的更多相关文章

  1. COJ 0346 WZJ的旅行(二)更新动态树分治版本

    WZJ的旅行(二) 难度级别:D: 运行时间限制:3000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 时隔多日,WZJ又来到了幻想国旅行.幻想国由N个城市组成,由 ...

  2. COJ 0979 WZJ的数据结构(负二十一)

    WZJ的数据结构(负二十一) 难度级别:C: 运行时间限制:5000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 请你实现一个数据结构,完成这样的功能: 给你一个 ...

  3. COJ 1002 WZJ的数据结构(二)(splay模板)

    我的LCC,LCT,Splay格式终于统一起来了... 另外..这个形式的Splay是标准的Splay(怎么鉴别呢?看Splay函数是否只传了一个变量node就行),刘汝佳小白书的Splay写的真是不 ...

  4. COJ 0967 WZJ的数据结构(负三十三)

    WZJ的数据结构(负三十三) 难度级别:E: 运行时间限制:7000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 请你设计一个数据结构,完成以下功能: 给定一个大 ...

  5. COJ 0970 WZJ的数据结构(负三十)树分治

    WZJ的数据结构(负三十) 难度级别:D: 运行时间限制:1000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 给你一棵N个点的无根树,点和边上均有权值.请你设计 ...

  6. COJ 0349 WZJ的旅行(五)

    WZJ的旅行(五) 难度级别:E: 运行时间限制:3000ms: 运行空间限制:262144KB: 代码长度限制:2000000B 试题描述 WZJ又要去旅行了T^T=0.幻想国由N个城市组成,由于道 ...

  7. COJ 0601&0602 动态规划(二)及加强

    未加强传送门0601:http://oj.cnuschool.org.cn/oj/home/addSolution.htm?problemID=571 加强传送门0602:http://oj.cnus ...

  8. COJ 0990 WZJ的数据结构(负十)

    WZJ的数据结构(负十) 难度级别:D: 运行时间限制:5000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 给你一个N个节点的有根树,从1到N编号,根节点为1并给 ...

  9. COJ 1008 WZJ的数据结构(八) 树上操作

    传送门:http://oj.cnuschool.org.cn/oj/home/problem.htm?problemID=986 WZJ的数据结构(八) 难度级别:E: 运行时间限制:3000ms: ...

随机推荐

  1. linux 下 apt命令集详解

    apt命令用法 packagename指代为软件包的名称 apt-get update 在修改/etc/apt/sources.list或/etc/apt/preferences之後运行该命令.此外您 ...

  2. QT 内存泄露 检测

      一:问题出现     最近几天在做一个QT程序,IPX的检测控制程序.需要全天候运行.自己做完了,然后就运行.使用  top|grep TP2  来动态检测程序的CPU,内存占用律.不幸的是,一晚 ...

  3. debian7 安装配置

    最近几天折腾了一下Debian 7 (gnome桌面DVD版,KDE桌面CD版最后会提到),总的来说收获还是挺大的,对比以前使用ubuntu,debian 7给我的感觉像是一个新生婴儿,不带多余的花俏 ...

  4. c++回调编程本质

    1. boost:bind获得一个函数对象,就像函数指针一样,这个行为可以作为回调 2. bosot:bind的函数对象可以保存别的对象的引用,回调对象的成员函数 3. boost:function是 ...

  5. AC自动机学习笔记

    AC自动机 ----多个模板的字符串匹配 字典树Trie加上失配边构成 插入操作:ac.insert(p[i],i);构造失配函数:ac.getFail();计算文本串T中每个模板串的匹配数:ac.f ...

  6. sql 学习笔记 p46

    交换行 update tab1 set c1=c2,c2=c1  .说明sql是临时表的存储,在查询出来的结果为决定前,可以随意操纵临时表中的列 update tab set c1=c1+(selec ...

  7. android - 模拟器连接本地tomcat

    在使用android真机试图连接本地的tomcat的时候,发现一直没有反应.网上搜了很多资料,加上自己不断测试,后来发现模拟器访问tomcat的时候,ip的概念跟在pc上访问tomcat用的ip,根本 ...

  8. 64位Window操作系统下,Orcal数据访问服务器端和客户端版本对应与通讯问题

    最近做一个小系统,需要在客户现场搭建数据库环境.之前我们一直访问的是公司的一个测试库,现在需要在现场开发,现场的Orcal服务器是12C ,我们本不打算重装服务器端orcal,故将我们自己电脑的orc ...

  9. phpstudy apache 刚启动便停止

    1.添加站点 2.重启服务 3.遇见问题 apache 刚启动,1秒钟中后就停止 4.解决问题 发现是自己添加的网站中包含中文路径的问题,建议不要在自己的网站目录下包含中文.

  10. 基于GBT28181:SIP协议组件开发-----------第四篇SIP注册流程eXosip2实现(一)

    原创文章,引用请保证原文完整性,尊重作者劳动,原文地址http://www.cnblogs.com/qq1269122125/p/3945294.html. 上章节讲解了利用自主开发的组件SIP组件l ...