蒟蒻又回来写题解了。。。

题面

幼儿园里有 N 个小朋友, lxhgww 老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果。
但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候, lxhgww 需要满足小朋友们的 K 个要求。
幼儿园的糖果总是有限的, lxhgww 想知道他至少需要准备多少个糖果,才能使得每个小朋友都能够分到糖果,并且满足小朋友们所有的要求。

输入格式

输入的第一行是两个整数 N, K 。
接下来 K 行,表示这些点需要满足的关系,每行 33 个数字, x , A , B 。
如果 X=1 .表示第 A 个小朋友分到的糖果必须和第 B 个小朋友分到的精果一样多。
如果 X=2 ,表示第 A 个小朋友分到的糖果必须少于第 B 个小朋友分到的糖果。
如果 X=3 ,表示第 A 个小朋友分到的糖果必须不少于第 B 个小朋友分到的糖果。
如果 X=4 ,表示第 A 个小朋友分到的糖果必须多于第 B 个小朋友分到的糖果。
如果 X=5 ,表示第 A 个小朋友分到的糖果必须不多于第 B 个小朋友分到的糖果。

输出格式

输出一行,表示 lxhgww 老师至少需要准备的糖果数,如果不能满足小朋友们的所有要求,就输出 -1。

思路

神仙题(不是思路,而是卡时神仙。。。)

不过还是先看思路。。。

由x==1时可得A==B,就是两边相等,建一条a到b权为0的双向边。

由x==2时可得A<B,所以要让A+x(x>=1)>B,建一条a到b权为1的单向边。

由x==3时可得A>=B,所以要让B+x(x>=0)>=A,建一条b到a权为0的单向边。

由x==4时可得A>B,所以要让B+x(x>=1)>A,建一条b到a权为1的单向边。

由x==5时可得A<=B,所以要让A+x(x>=0)>=B,建一条a到b权为0的单向边。

然后根据不等式同大取大,跑个SPFA最长路(顺便判个环)就行了(然后没A)。

???

万一x==2||x==4时A==B呢?你还要再跑一遍???直接特判cout<<-1<<endl;return 0;

万一爆int呢?开long long吧

万一。。。这个真没想到。。。

先看一下90分代码

// luogu-judger-enable-o2
#include<bits/stdc++.h>
using namespace std;
];
],cnt=,N,K;
];
],tot[];
inline long long read() {
    ,f=;char ch=getchar();
    ') {if (ch=='-') f=-f;ch=getchar();}
    +ch-',ch=getchar();
    return ret*f;
}
void add(long long a,long long b,long long c)
{
    Edge[++cnt].next=head[a];
    Edge[cnt].to=b;
    Edge[cnt].dis=c;
    head[a]=cnt;
}
void SPFA(long long s)
{
    ;i<=N;i++) vis[i]=,dis[i]=-2e9,tot[i]=;
    queue<int> q;
    q.push(s); vis[s]=; dis[s]=; tot[s]++;
    while(!q.empty())
    {
        long long u=q.front();
        q.pop();
        vis[u]=;
        for (long long i=head[u];i;i=Edge[i].next)
        {
            long long v=Edge[i].to;
            if (dis[v]<dis[u]+Edge[i].dis)
            {
                dis[v]=dis[u]+Edge[i].dis;
                ;
                else if (tot[v]>=N)
                {
                cout<<-<<endl;
                exit();
                return;
                }
            }

        }
    }
}
int main()
{
    N=read();K=read();
    ;i<=K;i++)
    {
        long long X,A,B;
        X=read();A=read();B=read();
        ) add(A,B,),add(B,A,);
        )
        <<endl;;}
        );
        ) add(B,A,);
        )
        <<endl;;}
        );
        ) add(A,B,);
    }
    ;
    ;i<=N;i++) add(s,i,);
    SPFA(s);
    ;
    ;i<=N;i++) ans+=dis[i];
    cout<<ans<<endl;
    ;
}

再看一下100代码

#include<bits/stdc++.h>
using namespace std;
];
],cnt=,N,K;
];
],tot[];
inline long long read() {
    ,f=;char ch=getchar();
    ') {if (ch=='-') f=-f;ch=getchar();}
    +ch-',ch=getchar();
    return ret*f;
}
void add(long long a,long long b,long long c)
{
    Edge[++cnt].next=head[a];
    Edge[cnt].to=b;
    Edge[cnt].dis=c;
    head[a]=cnt;
}
void SPFA(long long s)
{
    ;i<=N;i++) vis[i]=,dis[i]=-,tot[i]=;
    queue<long long> q;
    q.push(s); vis[s]=; dis[s]=; tot[s]++;
    while(!q.empty())
    {
        long long u=q.front();
        q.pop();
        vis[u]=;
        for (long long i=head[u];i;i=Edge[i].next)
        {
            long long v=Edge[i].to;
            if (dis[v]<dis[u]+Edge[i].dis)
            {
                dis[v]=dis[u]+Edge[i].dis;
                ;
                else if (tot[v]>=N)
                {
                cout<<-<<endl;
                exit();
                return;
                }
            }

        }
    }
}
int main()
{
    N=read();K=read();
    ;i<=K;i++)
    {
        long long X,A,B;
        X=read();A=read();B=read();
        ) add(A,B,),add(B,A,);
        )
        {
        <<endl;;}
        );
        }
        ) add(B,A,);
        )
        {
        <<endl;;}
        );
        }
        ) add(A,B,);
    }
    ;
    ;i--) add(s,i,);//神仙优化,看到就是赚到
    SPFA(s);
    ;
    ;i<=N;i++) ans+=dis[i];
    cout<<ans<<endl;
    ;
}

。。。等待dalao解答

「SCOI2011」糖果的更多相关文章

  1. 「WC2013」糖果公园

    「WC2013」糖果公园 传送门 树上带修莫队板子题. 看懂题意后就是板子题了. 参考代码: #include <algorithm> #include <cstdio> #i ...

  2. LG2512/BZOJ1045 「HAOI2008」糖果传递 中位数

    问题描述 LG2512 BZOJ1045 题解 这是一个链状问题的环状版本. 问题最终变为给定数轴上的\(n\)个点,找出一个到他们的距离之和尽量小的点,而这个点就是这些数中的中位数. 网络流24题的 ...

  3. 「SCOI2011」棘手的操作

    传送门 Description 有\(N\)个节点,标号从\(1\)到\(N\),这\(N\)个节点一开始相互不连通.第$ i\(个节点的初始权值为\)a_i$ ,接下来有如下一些操作: U x y ...

  4. 「译」JUnit 5 系列:条件测试

    原文地址:http://blog.codefx.org/libraries/junit-5-conditions/ 原文日期:08, May, 2016 译文首发:Linesh 的博客:「译」JUni ...

  5. 「译」JUnit 5 系列:扩展模型(Extension Model)

    原文地址:http://blog.codefx.org/design/architecture/junit-5-extension-model/ 原文日期:11, Apr, 2016 译文首发:Lin ...

  6. JavaScript OOP 之「创建对象」

    工厂模式 工厂模式是软件工程领域一种广为人知的设计模式,这种模式抽象了创建具体对象的过程.工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题. function createPers ...

  7. 「C++」理解智能指针

    维基百科上面对于「智能指针」是这样描述的: 智能指针(英语:Smart pointer)是一种抽象的数据类型.在程序设计中,它通常是经由类型模板(class template)来实做,借由模板(tem ...

  8. 「JavaScript」四种跨域方式详解

    超详细并且带 Demo 的 JavaScript 跨域指南来了! 本文基于你了解 JavaScript 的同源策略,并且了解使用跨域跨域的理由. 1. JSONP 首先要介绍的跨域方法必然是 JSON ...

  9. 「2014-5-31」Z-Stack - Modification of Zigbee Device Object for better network access management

    写一份赏心悦目的工程文档,是很困难的事情.若想写得完善,不仅得用对工具(use the right tools),注重文笔,还得投入大把时间,真心是一件难度颇高的事情.但,若是真写好了,也是善莫大焉: ...

随机推荐

  1. poj2828 Buy Tickets (线段树 插队问题)

    Buy Tickets Time Limit: 4000MS   Memory Limit: 65536K Total Submissions: 22097   Accepted: 10834 Des ...

  2. MT【77】函数的定义理解

    答案:D.比如C 中令$x^2+1=2,x=-1,1,$ 得$f(2)=0,2$与定义矛盾,A,B同理排除. D中注意到$x^2-2x$与$|x-1|$对称轴都是$x=1$. 评:函数的定义,首先是两 ...

  3. zk会话,快照,序列化,本地存储

    FolloewerRequestProcessor类 追随者 输入会有不同的形式,客户端请求,提议,提交事务 通过箭头来标示追随者处理的不同路径 本地存储 事务日志和快照 SyncRequestPro ...

  4. 解决 No Entity Framework provider found for the ADO.NET provider

    方法很简单,添加下面的dll即可 EntityFramework.SqlServer.dll     疯吻IT

  5. 【转】vi 写完文件保存时才发现是 readonly

    在MAC上编辑apache配置文件,老是忘记sudo…… readonly的文件保存时提示 add ! to override, 但这仅是对root来说的啊! 百毒了一下竟然还有解决方案!! :w ! ...

  6. 【洛谷P1828】香甜的黄油

    题目大意:给定 N 个点,M 条边的无向图,在其中选定 P 个点,每个点可能被选多次,求图中的一个点到选定的 P 个点的距离的值最小是多少. 题解:由于数据范围的限制,直接 Floyd 会超时,因此对 ...

  7. SSO系统的实现

    当一个网站系统比较大型的时候,我们通常采用面向服务的编程,采用分布式的编程.各个子系统共同来实现一个大的系统,这时候登录注册功能的实现也面临着一些问题. 一.WHAT? SSO是什么? sso是单点登 ...

  8. Scrapy爬虫框架教程(四)-- 抓取AJAX异步加载网页

    欢迎关注博主主页,学习python视频资源,还有大量免费python经典文章 sklearn实战-乳腺癌细胞数据挖掘 https://study.163.com/course/introduction ...

  9. spring框架学习(二)使用注解代替xml配置

    注解 1.使用注解配置spring 1)开启使用注解代理配置文件 <?xml version="1.0" encoding="UTF-8"?> &l ...

  10. 关于System.getProperty("java.io.tmpdir");的输出,及System.getProperty();参数

    1,首先来介绍下System.getProperty("java.io.tmpdir")输出因为这个输出有点特殊. 理论介绍:他是获取系统临时目录.可以是window的temp,l ...