当前位置: 移动技术网 > IT编程>开发语言>C/C++ > HDU 1384 查分约束

HDU 1384 查分约束

2018年10月15日  | 移动技术网IT编程  | 我要评论

yytvo,红歌串词,今天93号汽油价格

题意:给了n个区间,要求每个区间至少有c个数字出现,问满足的最小的数字个数

思路:用si代表0到i的区间内的数字个数,然后可以写出查分约束方程,对于一个区间则sa-s(b-1)>=c的,然后隐含的一个条件就是si-s(i-1)>=0且<=1的,然后泡个最长路就行,对于查分约束求最大值是<=的形式,而求最小值则是>=的形式

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
const int inf=0x3f3f3f3f;
const ll inf=0x3f3f3f3f3f3f3f3fll;
const int maxn=50010;
int dis[maxn],head[maxn],n,k;
bool vis[maxn];
struct edge{
    int to,w,next;
}e[maxn*10];
void add_edge(int u,int v,int w){
    e[k].to=v;e[k].w=w;e[k].next=head[u];head[u]=k++;
}
void spfa(int s){
    queueque;
    memset(dis,-inf,sizeof(dis));
    memset(vis,0,sizeof(vis));
    que.push(s);dis[s]=0;
    while(!que.empty()){
        int t=que.front();que.pop();
        vis[t]=0;
        for(int i=head[t];i!=-1;i=e[i].next){
            if(dis[t]+e[i].w>dis[e[i].to]){
                dis[e[i].to]=dis[t]+e[i].w;
                if(!vis[e[i].to]){
                    vis[e[i].to]=1;
                    que.push(e[i].to);
                }
            }
        }
    }
}
int main(){
    int u,v,c;
    while(scanf("%d",&n)!=-1){
        k=0;
        memset(head,-1,sizeof(head));
        int s=inf,t=-inf;
        for(int i=0;i

 

 

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网