BZOJ 4276: [ONTAK2015]Bajtman i Okr?g?y Robin

最大权值匹配,贪心匈牙利即可。

检查一些人是否能被全部抓住可以采用左端点排序,右端点优先队列处理。

By:大奕哥

#include<bits/stdc++.h>
using namespace std;
const int N=5005;
struct node{
    int l,r,c;
    bool operator <(const node &b)const{
        return c>b.c;
    }
}p[N];
int match[N],ans,n;
bool v[N];
bool Hungary(int x)
{
    for(int i=p[x].l;i<=p[x].r;++i)
    {
        if(!v[i])
        {
            v[i]=1;
            if(!match[i]||Hungary(match[i]))
            {
                match[i]=x;
                return 1;
            }
        }
    }
    return 0;
}
int main()
{
//    freopen("1.out","r",stdin);
//    freopen("my.out","w",stdout);
    scanf("%d",&n);
    for(int i=1;i<=n;++i)
    {
        scanf("%d%d%d",&p[i].l,&p[i].r,&p[i].c);
        p[i].r--;
    }
    sort(p+1,p+1+n);
    for(int i=1;i<=n;++i)
    {
        memset(v,0,sizeof(v));
        if(Hungary(i))ans+=p[i].c;
    }
    printf("%d\n",ans);
    return 0;
}

原文地址:https://www.cnblogs.com/nbwzyzngyl/p/8386921.html

时间: 2024-10-30 05:09:44

BZOJ 4276: [ONTAK2015]Bajtman i Okr?g?y Robin的相关文章

bzoj 4276: [ONTAK2015]Bajtman i Okr?g?y Robin【线段树+最大费用最大流】

--因为T点忘记还要+n所以选小了所以WA了一次 注意!题目中所给的时间是一边闭一边开的区间,所以读进来之后先l++(或者r--也行) 线段树优化建图,很神.(我记得还有个主席树优化建树的?)首先考虑暴力建图:s向每个强盗i连(s,i,1,c[i]),每个时间j向t连(j,t,1,0),每个强盗向所有他的时间j连边(i,j,1,0),然而这样显然是会TLE的. 所以考虑向区间连边,建一颗线段树,每个区间向它的两个子节点连费用0流量inf的边,叶节点向t(注意开大!)连费用0流量1的边限制"你在每

【bzoj4276】[ONTAK2015]Bajtman i Okr?g?y Robin 线段树优化建图+费用流

题目描述 有n个强盗,其中第i个强盗会在[a[i],a[i]+1],[a[i]+1,a[i]+2],...,[b[i]-1,b[i]]这么多段长度为1时间中选出一个时间进行抢劫,并计划抢走c[i]元.作为保安,你在每一段长度为1的时间内最多只能制止一个强盗,那么你最多可以挽回多少损失呢? 输入 第一行包含一个正整数n(1<=n<=5000),表示强盗的个数. 接下来n行,每行包含三个正整数a[i],b[i],c[i](1<=a[i]<b[i]<=5000,1<=c[i]

【BZOJ 1563】 [NOI2009]诗人小G

Description Input Output 对于每组数据,若最小的不协调度不超过1018,则第一行一个数表示不协调度若最小的不协调度超过1018,则输出"Too hard to arrange"(不包含引号).每个输出后面加"--------------------" Sample Input 4 4 9 3 brysj, hhrhl. yqqlm, gsycl. 4 9 2 brysj, hhrhl. yqqlm, gsycl. 1 1005 6 poet

BZOJ 4245: [ONTAK2015]OR-XOR 贪心

4245: [ONTAK2015]OR-XOR Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 567  Solved: 312[Submit][Status][Discuss] Description 给定一个长度为n的序列a[1],a[2],...,a[n],请将它划分为m段连续的区间,设第i段的费用c[i]为该段内所有数字的异或和,则总费用为c[1] or c[2] or ... or c[m].请求出总费用的最小值. Input 第一行包含

BZOJ 1101([POI2007]Zap-满足x&lt;=a&amp;&amp;y&lt;=b&amp;&amp;gcd(x,y)=d的数对个数)

1101: [POI2007]Zap Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 1646  Solved: 577 [Submit][Status][Discuss] Description FGD正在破解一段密码,他需要回答很多类似的问题:对于给定的整数a,b和d,有多少正整数对x,y,满足x<=a,y<=b,并且gcd(x,y)=d.作为FGD的同学,FGD希望得到你的帮助. Input 第一行包含一个正整数n,表示一共有n组询问.(

●BZOJ 4278 [ONTAK2015]Tasowanie

题链: http://www.lydsy.com/JudgeOnline/problem.php?id=4278 题解: 把两个串连接起来,用一个大数连接(必须要用大数).倍增算法求出后缀排名.然后两个指针指向A,B串,每次比较两个后缀的大小,优先取出小的那个后缀的首字母,然后对应指针向后移动一位. 代码: #include<cstdio> #include<cstring> #include<iostream> #define MAXN 450000 #define

BZOJ 4245 ONTAK2015 OR-XOR

题目大意:给定一个长度为n的序列,要求分成m段,使得每段异或和的或值最小 求出前缀异或和后从大到小按位确定,如果某一位上有至少m个数是0且第n个数是0,那么这一位就可以是0,同时将所有是1的数字标记为不可选 时间复杂度O(nlogai) #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define M 500500 using namespace s

BZOJ.4298.[ONTAK2015]Bajtocja(Hash 启发式合并)

题目链接 \(Description\) 给定d张无向图,每张图都有n个点.一开始,在任何一张图中都没有任何边. 接下来有m次操作,每次操作会给出a,b,k,意为在第k张图中的点a和点b之间添加一条无向边. 你需要在每次操作之后输出有序数对(a,b)的个数,满足1≤a,b≤n,且a点和b点在d张图中都连通. d<=200,n<=5000,m<=1000000 \(Solution\) 我们需要知道的只是每对点之间是否连通,即在同一张图所属的连通块是否一样 于是我们对每个点在d张图中所属的

波兰题目补全计划

Introduce 本人比较喜欢做波兰的题目,感觉这些题目十分清真,思维也比较好.欢迎同样喜欢波兰题目的OIer来交流.以下是我有记录地刷过的题目. 比较好的题吧:BZOJ #3746.[POI2015]Czarnoksi??nicy okr?g?ego sto?u source:XXII OI - Etap I - Zadanie Czarnoksi??nicy okr?g?ego sto?u notes: 动态规划我的题解http://www.cnblogs.com/TSHugh/p/882