传送门: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. htaccess URL重写rewrite与重定向redirect(转)

    1. 将 .htm 页面映射到 .php 1 Options +FollowSymlinks 2 RewriteEngine on 3 RewriteRule ^(.*)\.htm$ $1.php [ ...

  2. PHP安全编程:网站安全设计的一些原则(转)

    深度防范 深度防范原则是安全专业人员人人皆知的原则,它说明了冗余安全措施的价值,这是被历史所证明的. 深度防范原则可以延伸到其它领域,不仅仅是局限于编程领域.使用过备份伞的跳伞队员可以证明有冗余安全措 ...

  3. QT unit test code coverage

    准备环境: qt-creator5.2.1 , gcov(gcc 默认安装),lcov(gcov 的图形化显示界面),qt_testlib 各环境介绍: 1.gcov   gcov 是一个可用于C/C ...

  4. Understanding Extension Class Loading--官方

    http://docs.spring.io/spring-amqp/docs/1.3.6.RELEASE/reference/html/sample-apps.html#d4e1285 http:// ...

  5. windows下如何设置mysql环境变量

    方法一: windows下如何设置mysql环境变量 关键词: mysql, Setting Environment Variables, 环境变量设置 我的电脑->属性->高级-> ...

  6. gridview添加header

    gridview是不能添加header的,这里的解决方法是将listview改造成gridview使用,功能很好用,唯一的缺点是列数不能自适应 示例代码下载地址http://pan.baidu.com ...

  7. 中国剩余定理模板poj1006

    #include <cstdio> #include <iostream> #include <cstring> #include <cmath> #i ...

  8. supervisor 部署文档

    supervisor 部署文档 supervisor 需要Python支持,如果不用系统的supervisor,单独安装python python 安装 #依赖 yum install python- ...

  9. Centos7+Apache2.4+php5.6+mysql5.5搭建Lamp环境——为了wordPress

    最近想搭建个人博客玩玩,挑来挑去发现口碑不错的博客程序是wordpress,简称wp.虽然是学java路线的程序员,但因入行时间太短,至今没有发现较为称手开源的博客程序,如果各位大神有好的推荐,也希望 ...

  10. Mysql 中is null 和 =null 的区别

    在mysql中,筛选非空的时候经常会用到is not null和!=null,这两种方法单从字面上来看感觉是差不多的,其实如 果去运行一下试试的话差别会很大! 为什么会出现这种情况呢? null 表示 ...