BZOJ2330_糖果_KEY
看题目可知这是一道差分约束的题目。
根据每种关系建边如下:

对于每种情况建边,然后跑一边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 ;
}
BZOJ2330_糖果_KEY的更多相关文章
- 原生js可爱糖果数字时间特效
效果展示:http://hovertree.com/texiao/js/35/ 数字采用漂亮的糖果皮肤设计 效果图: 代码如下: <!DOCTYPE html> <html> ...
- UOJ #58 【WC2013】 糖果公园
题目链接:糖果公园 听说这是一道树上莫队的入门题,于是我就去写了--顺便复习了一下莫队的各种姿势. 首先,我们要在树上使用莫队,那么就需要像序列一样给树分块.这个分块的过程就是王室联邦这道题(vfle ...
- [LeetCode] Candy 分糖果问题
There are N children standing in a line. Each child is assigned a rating value. You are giving candi ...
- UOJ58 【WC2013】糖果公园
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- bzoj2330: [SCOI2011]糖果
2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MB Description 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友 ...
- 糖果 bzoj 2330
糖果(1s 128MB)candy [题目描述] 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明 ...
- BZOJ 2330: [SCOI2011]糖果 [差分约束系统] 【学习笔记】
2330: [SCOI2011]糖果 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 5395 Solved: 1750[Submit][Status ...
- Vijos P1196吃糖果游戏[组合游戏]
描述 Matrix67和Shadow正在做一个小游戏. 桌子上放着两堆糖果,Matrix67和Shadow轮流对这些糖果进行操作.在每一次操作中,操作者需要吃掉其中一堆糖果,并且把另一堆糖果分成两堆( ...
- BZOJ 4548 小奇的糖果
Description 有 \(N\) 个彩色糖果在平面上.小奇想在平面上取一条水平的线段,并拾起它上方或下方的所有糖果.求出最多能够拾起多少糖果,使得获得的糖果并不包含所有的颜色. Input 包含 ...
随机推荐
- DQN核心思想理解
看过Deep learning(convolutional neural network),看过RL(Q-learning).但是在两者结合这一块一直弄不明白. 我的疑问在于一直不明白DL是怎样识别出 ...
- GitHub & Git 基础 (YouTube中文翻译版)
GitHub & Git 基础系列视频 播放列表 由于视频资源在YouTube上,可能需要FQ:https://code.google.com/p/chromeplus/ 视频包括以下内容 1 ...
- C#图解教程读书笔记(第4章 类:基础)
类成员包括数据成员和函数成员. 和C/C++不同,C#在类型的外部不能声明全局变量,所有的字段都属于类型,而且必须在类型声明内部声明. 和C/C++不同,方法没有返回默认类型,所有方法必须包含返回类型 ...
- QT信号和槽在哪个线程执行问题
时隔四个月后的第一篇,换了个公司可以登录的博客,记录一些学习内容吧 这是看到别人写的比较好的一篇,排版有点乱 QThread的使用方法 起源 昨天不小心看到Qt开发人员( Bradley T.Hugh ...
- 修改WSAD的默认工作区(转)
如果要一直用某个目录作为工作区,可以在启动WSAD的时候将该目录设为默认工作区,这样启动时直接启动,方便.快捷.但是如果设置后在想换工作区就比较麻烦了,因为没有可供选择的界面了,跟网上搜了一下总结共有 ...
- ASP.NET Web API编程——构建api帮助文档
1 概要 创建ASP.NET Web Api 时模板自带Help Pages框架. 2 问题 1)使用VS创建Web Api项目时,模板将Help Pages框架自动集成到其中,使得Web Api项目 ...
- 如何调试在OJ中的代码
在OJ上的原始程序: class Solution { public: ) return; ; ; while(*str != '\0'){ if(*str == ' '){ blank++; len ...
- CPP-基础:事件
事件(Event) 事件对象也可以通过通知操作的方式来保持线程的同步.并且可以实现不同进程中的线程同步操作. 信号量包含的几个操作原语: CreateEvent() 创建一个事件 ...
- C# 控制台模拟序列化和反序列化
序列化:将对象转换成二进制串的过程 反序列化:将序列化过程中产生的二进制串转换成对象的过程 作用:传输数据 using System; namespace WriteTextContent { [Se ...
- C# 实现Excel读取接口写入数据
[Route("adm/getInfo")] [HttpGet] public string GetInfo() { var types = typeof(GCP.Server.W ...