传送门: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. VB.NET版机房收费系统—DataGridView应用

    事实上,先前刚刚開始敲机房的时候,刚用到DataGridView的时候,总显得力不从心,先要一下子就学会,看了非常多的资料,但是依照写的时候,自己有不知道从什么地方下手,于是,当自己用查询SQL语句, ...

  2. ExtJS4.2学习(6)——基础知识之proxy篇

    本次讨论下数据代理,其实个人第一次听到这个短语的时候,并不是特别的适应,在英语中的含义是proxy,其实如若大家也觉得不适应的话,就直接称呼proxy吧. 在ExtJS中,proxy是进行数据读写的主 ...

  3. Core Foundation框架介绍

    Core Foundation框架介绍 **参考网址: ARC下OC对象和CF对象之间的桥接 Core Foundation框架介绍 Core Foundation框架 Core Foundation ...

  4. Python开发【第十篇】:CSS --无内容点击-不进去(一)

    Python开发[第十篇]:CSS  --无内容点击-不进去(一)

  5. Adobe DreamweaverCS6安装及破解(序列号+破解补丁)

    一:安装 1) Adobe DreamweaverCS6中文版下载地址:Adobe DreamweaverCS6中文版下载 2)Adobe DreamweaverCS6安装及破解说明下载地址:Adob ...

  6. 如何在ASP.NET端获取屏幕宽度

    using System.Windows.Forms; 首先引用上面的命名空间. 然后在代码中获取屏幕信息.如下代码: System.Windows.Forms.Screen screen = Sys ...

  7. 生成PDF并下载。

    例子是生成一个pdf格式的证书: //创建Document Document document = null; //为该Document创建一个Writer实例 PdfWriter writer = ...

  8. c#隐式转换之有符号位转换

    有符号位类型的转换,额外的高位用源表达式的符号位填充.这样就维持了被转换的值的正确符号和大小. 特别注意的是负数的转换,额外的高位用1填充,因为负数的二进制表示是对应正数的二进制取反加1,所以高位用1 ...

  9. android对象序列化Parcelable浅析

    一.android序列化简介 我们已经知道在Android使用Intent/Bindler进行IPC传输数据时,需要将对象进行序列化. JAVA原本已经提供了Serializable接口来实现序列化, ...

  10. 从Select语句看Oracle查询原理(了解Oracle的查询机制)

    第一步:客户端把语句发给服务器端执行 当我们在客户端执行select语句时,客户端会把这条SQL语句发送给服务器端,让服务器端的进程来处理这语句.也就是说,Oracle客户端是不会做任何的操作,他的主 ...