题目传送门

看题目可知这是一道差分约束的题目。

根据每种关系建边如下:

对于每种情况建边,然后跑一边SPFA。(最长路)

因为可能会有自环或环的情况,都不可能存在。

跑SPFA时记录入队次数,超过N弹出。

SPFA的dist起始值为1,ans=∑dist[i]

对于每个点做一遍SPFA会超时,所以将所有点放入队列中,所有点一起跑SPFA。

code:

/**************************************************************
    Problem: 2330
    User: yekehe
    Language: C++
    Result: Accepted
    Time:1280 ms
    Memory:43792 kb
****************************************************************/
 
#include <cstdio>
#include <cstdlib>
#include <cstring>
using namespace std;
 
int read()
{
    char c;while(c=getchar(),(c<''||c>'')&&c!='-');
    int x=,y=;c=='-'?y=-:x=c-'';
    while(c=getchar(),c>=''&&c<='')x=x*+c-'';
    return x*y;
}
 
struct list{
    int head[],nxt[],To[],W[],cnt;
    list(){
        memset(head,-,sizeof head);
        memset(nxt,-,sizeof nxt);
        cnt=;
    }
     
    void add(int x,int y,int c)
    {
        To[cnt]=y;
        W[cnt]=c;
        nxt[cnt]=head[x];
        head[x]=cnt;
        cnt++;
    }
}P;
 
int N,K;
int dist[],l[],flag[];
int into[],SF=;
 
void SPFA()
{
    int h=,t=;
    memset(into,,sizeof into);
        for(int i=;i<=N;i++)l[++t]=i,into[i]++;//入队++
        while(h<t){
            int front=l[++h];
            flag[front]=;
                for(int i=P.head[front];i!=-;i=P.nxt[i]){
                    if(dist[P.To[i]]<P.W[i]+dist[front]){//求最长路
                        dist[P.To[i]]=P.W[i]+dist[front];
                        if(!flag[P.To[i]]){
                            l[++t]=P.To[i],flag[P.To[i]]=;
                            into[P.To[i]]++;
                            if(into[P.To[i]]>N){SF=-;return ;}//判环
                        }
                    }
                }
        }
    return ;
}
 
int main()
{
    N=read();K=read();
    register int i;
        for(i=;i<=K;i++){
            int o=read(),x=read(),y=read();
                switch(o){
                    case :P.add(x,y,),P.add(y,x,);break;
                    case :P.add(x,y,);break;
                    case :P.add(y,x,);break;
                    case :P.add(y,x,);break;
                    case :P.add(x,y,);break;
                }
        }
        for(i=;i<=N;i++)dist[i]=;
    SPFA();
    if(SF<)return puts("-1"),;//有环
    long long ans=;
        for(i=;i<=N;i++)ans+=(long long)dist[i];
    printf("%lld",ans);
    return ;
}

这道题还有Tarjan缩点+DAG上DP的做法。

BZOJ2330_糖果_KEY的更多相关文章

  1. 原生js可爱糖果数字时间特效

    效果展示:http://hovertree.com/texiao/js/35/ 数字采用漂亮的糖果皮肤设计 效果图: 代码如下: <!DOCTYPE html> <html> ...

  2. UOJ #58 【WC2013】 糖果公园

    题目链接:糖果公园 听说这是一道树上莫队的入门题,于是我就去写了--顺便复习了一下莫队的各种姿势. 首先,我们要在树上使用莫队,那么就需要像序列一样给树分块.这个分块的过程就是王室联邦这道题(vfle ...

  3. [LeetCode] Candy 分糖果问题

    There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...

  4. UOJ58 【WC2013】糖果公园

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  5. bzoj2330: [SCOI2011]糖果

    2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MB Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友 ...

  6. 糖果 bzoj 2330

    糖果(1s 128MB)candy [题目描述] 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明 ...

  7. BZOJ 2330: [SCOI2011]糖果 [差分约束系统] 【学习笔记】

    2330: [SCOI2011]糖果 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 5395  Solved: 1750[Submit][Status ...

  8. Vijos P1196吃糖果游戏[组合游戏]

    描述 Matrix67和Shadow正在做一个小游戏. 桌子上放着两堆糖果,Matrix67和Shadow轮流对这些糖果进行操作.在每一次操作中,操作者需要吃掉其中一堆糖果,并且把另一堆糖果分成两堆( ...

  9. BZOJ 4548 小奇的糖果

    Description 有 \(N\) 个彩色糖果在平面上.小奇想在平面上取一条水平的线段,并拾起它上方或下方的所有糖果.求出最多能够拾起多少糖果,使得获得的糖果并不包含所有的颜色. Input 包含 ...

随机推荐

  1. ABAP类的文档生成工具

    本文介绍的工具原理和JavaDoc类似,位于software component BBPCRM 1. 在ABAP类里新建一个名为CLASS_DOCU的私有方法. 然后把所有的注释写在这个方法源代码的前 ...

  2. SAP CRM settype的创建,背后发生了什么

    来自我的同事Sara. 当我们在CRM系统里创建一个settype之后,其实系统后台悄悄的帮我们创建了很多ABAP对象,比如对应的database tables, other ABAP Diction ...

  3. 使用BAPISDORDER_GETDETAILEDLIST创建S/4HANA的Outbound Delivery

    要在S/4HANA里创建Outbound Delivery,首先要具有一个销售订单,ID为376,通过事务码VA03查看. 只用61行代码就能实现基于这个Sales Order去创建对应的outbou ...

  4. avl 平衡搜索二叉树的旋转图示

    avl树的平衡是通过旋转不平衡子树完成的,旋转是如何完成的?这有幅不错的图http://upload.wikimedia.org/wikipedia/en/1/15/Tree_Rotations.gi ...

  5. Java导出Highcharts需要的3个外部jar包

    xerces batik fop 这三个JAR包. 绝对可用.自本用过. 如果两个项目在同一个TOMCAT下并且同时用到xerces.jar,需要前这个外放在TOMCAT下的lib目录下.其他的容器中 ...

  6. Executor线程池框架

    Executor线程池框架 new Thread()的缺点 每次new Thread()耗费性能 调用new Thread()创建的线程缺乏管理,被称为野线程,而且可以无限制创建,之间相互竞争,会导致 ...

  7. springMVC框架下返回json格式的对象,list,map

    原文地址:http://liuzidong.iteye.com/blog/1069343 注意这个例子要使用jQuery,但是jquery文件属于静态的资源文件,所以要在springMVC中设置静态资 ...

  8. Perl 修改文件内容

    把test.txt文件中的字符aaa替换成bbb perl -pi -e "s/aaa/bbb/gi" test.txt 把test.txt文件中的字符aaa替换成bbb,并生成一 ...

  9. 【[SHOI2014]概率充电器】

    这是一道概率+树形\(dp\) 首先我们看到这里每一个的贡献都是1,所以我们要求的期望就是概率 求得其实就是这个 \[\sum_{i=1}^nP_i\] \(P_i\)为节点\(i\)通电的概率 显然 ...

  10. [USACO07DEC]Sightseeing Cows

    嘟嘟嘟 这题好像属于01分数规划问题,叫什么最优比率生成环. 题目概括一下,就是求一个环,满足∑v[i] / ∑c[i]最大. 我们可以堆上面的式子变个型:令 x = ∑v[i] / ∑c[i],则x ...