就根据题目中给的约束条件建图就行了

需要注意的是,我们要做的是最长路,因为需要约束每个点都是大于0

那么可以建一个超级源指向所有点,超级源的dis是1,边长为0

那么这样做最长路就可以了

好了我们这么写完了,之后发现re了,然后改大了点数组发现tle了。。。。

然后我也不知道怎么改,超级源连接所有点的时候,是for i:=1 to n do 的,这

样建完图之后,再做spfa相当于直接将n-1的点放入队列中,然后我改了下

连接的时候for i:=n downto 1 do 那么相当于将1-n放入队列中,然后这样就A了,

但是内存太大(之前RE开的),后来干脆把超级源去掉,直接将1-n放入队列,就可以直接A了

PS:最后的ans要用int64也就是longlong存,因为人太多了是吧。。。。

内个大神能告诉我下为啥1-n放入队列就行,n-1就不行,求教。。。orz

/**************************************************************
Problem:
User: BLADEVIL
Language: Pascal
Result: Accepted
Time: ms
Memory: kb
****************************************************************/ //By BLADEVIL
var
n, k :longint;
pre, other, len :array[..] of longint;
last :array[..] of longint;
l :longint;
que :array[..] of longint;
dis :array[..] of longint;
flag :array[..] of boolean;
count :array[..] of longint; procedure connect(x,y,z:longint);
begin
inc(l);
pre[l]:=last[x];
last[x]:=l;
other[l]:=y;
len[l]:=z;
end; procedure init;
var
i :longint;
x, a, b :longint;
begin
read(n,k);
for i:= to k do
begin
read(x,a,b);
if(not odd(x)) and (a=b) then
begin
writeln(-);
halt;
end;
case x of
:
begin
connect(a,b,);
connect(b,a,);
end;
:connect(a,b,);
:connect(b,a,);
:connect(b,a,);
:connect(a,b,);
end;
end;
end; procedure main;
var
h, t :longint;
q, p :longint;
cur :longint;
ans :int64;
i :longint; begin
fillchar(count,sizeof(count),);
h:=; t:=n;
for i:= to n do
begin
que[i]:=i;
flag[i]:=true;
dis[i]:=;
end;
while h<>t do
begin
h:=h mod +;
cur:=que[h];
flag[cur]:=false;
q:=last[cur];
while q<> do
begin
p:=other[q];
if dis[cur]+len[q]>dis[p] then
begin
dis[p]:=dis[cur]+len[q];
if not flag[p] then
begin
inc(count[p]);
if count[p]>n then
begin
writeln(-);
exit;
end;
t:=t mod +;
que[t]:=p;
flag[p]:=true;
end;
end;
q:=pre[q];
end;
end;
ans:=;
for i:= to n do ans:=ans+dis[i];
writeln(ans);
end; begin
init;
main;
end.

bzoj 2330 SCOI2011糖果 查分约束系统的更多相关文章

  1. bzoj 2330 [SCOI2011]糖果(差分约束系统)

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

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

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

  3. BZOJ 2330: [SCOI2011]糖果( 差分约束 )

    坑爹...要求最小值要转成最长路来做.... 小于关系要转化一下 , A < B -> A <= B - 1 ------------------------------------ ...

  4. BZOJ 2330 SCOI2011糖果 差分约束

    2330: [SCOI2011]糖果 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 2819  Solved: 820 题目连接 http://www ...

  5. BZOJ 2330 [SCOI2011]糖果 ——差分约束系统 SPFA

    最小值求最长路. 最大值求最短路. 发现每个约束条件可以转化为一条边,表示一个点到另外一个点至少要加上一个定值. 限定了每一个值得取值下界,然后最长路求出答案即可. 差分约束系统,感觉上更像是两个变量 ...

  6. bzoj 2330 [SCOI2011]糖果 差分约束模板

    题目大意 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配 ...

  7. 洛谷 P3275 BZOJ 2330 [SCOI2011]糖果

    题目描述 幼儿园里有N个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配 ...

  8. bzoj 2330: [SCOI2011]糖果

    #include<cstdio> #include<iostream> using namespace std; ],next[],u[],v[],h,t,a[]; ],f[] ...

  9. POJ2983 查分约束系统

    题意:        给你n个点,然后给你两种情况,P a b c,表明a在b的北边c那么远,V a b 表明a在b的北边(距离最少是1),问你这些条件是否冲突. 思路:       一开始想用带权并 ...

随机推荐

  1. [转] 前端开发利器--Brackets 的七种武器和旁门左道

    转自:http://www.jianshu.com/p/ff7798aa4548 Brackets是Adobe开发的web编辑器,是一款免费开源.多平台支持的软件,并在于GitHub上维护.Brack ...

  2. c++ combination by next_permutation

    #include <iostream> #include <algorithm> #include <vector> int main() { int n, r; ...

  3. ACE Reactor 源码解析

    http://blogs.readthedocs.org/   ACE的学习笔记,根据源码分析了Reactor模型的实现. 因为笔记编写技术限制,这里仅列出主要目录,如有可能可以抽空复制到该Blog中 ...

  4. Python|花了一天,为大家整理的一套来自外国大佬的密码速查表

    简单的HTTPS服务器 检查证书信息 输出 生成自签名证书 输出 准备一个签名注册请求 输出 生成无密码的RSA秘钥文件 用一个私钥给文件签名 输出 从签名验证一个文件 输出 通过pem文件做RSA加 ...

  5. 树莓派putty远程登录windows

    刚买树莓派的你,还在为要不要购买昂贵的屏幕而纠结吗?看完本博客学会远程登录,妈妈再也不用担心我的学习... 首先我们要知道树莓派的官方推荐系统是raspbian 很建议安装16年9月份的,其他的总是这 ...

  6. Win7系统下删除文件时出现“正在准备再循环”的解决方法

    今天,笔者在备份文件的时候,将一个word文档从移动硬盘复制到桌面.经过一系列“复(meng)杂(bi)”的操作之后,笔者突然发现,文件无法删除了.当右键文件点击“删除”时,出现对话框显示“正在准备 ...

  7. Linux pthread 线程池实现

    基于pthread封装了一个简易的ThreadPool,具有以下特性: 1.具有优先级的任务队列 2.线程池大小可以二次调整,增加线程或者删除空闲线程 3.任务两种重写方式,重写run或者使用函数回调 ...

  8. linux备忘录-例行性工作排程 (crontab)

    例行性工作排程 例行性工作排程分为两类 at at是只执行一次就结束的指令安排.要想使用at,必须要有atd服务的支持. crontab crontab是每隔一段时间自动执行的指令安排.crontab ...

  9. MySQL中Alter用法小结

    alter 方法是我们在处理MySQL数据库中一个常见的方法,能帮助我们更好的处理数据库中的表 1.增加 数据库中表的字段:alter table table_name add [column] co ...

  10. 搭建springmvc项目没扫描到mapper和service

    严重: Servlet.service() for servlet [spring] in context with path [/springmvc-demo] threw exceptionorg ...