解题:SCOI 2011 糖果

题面

能把差分约束卡死的题,因为正解并不是差分约束

 1 #include<queue>
 2 #include<cstdio>
 3 #include<cctype>
 4 #include<cstring>
 5 #include<algorithm>
 6 using namespace std;
 7 const int N=100005;
 8 int p[N],noww[2*N],goal[2*N],val[2*N];
 9 int vis[N],inq[N],dis[N];
10 int n,k,t1,t2,t3,cnt;
11 long long ans;
12 queue<int> qs;
13 inline int read()
14 {
15     int ret=0;
16     char ch=getchar();
17     while(!isdigit(ch))
18         ch=getchar();
19     while(isdigit(ch))
20         ret=(ret<<3)+(ret<<1)+(ch^48),ch=getchar();
21     return ret;
22 }
23 inline void link(int f,int t,int v)
24 {
25     noww[++cnt]=p[f],p[f]=cnt;
26     goal[cnt]=t,val[cnt]=v;
27 }
28 void SBData()
29 {
30     if((t1==2||t1==4)&&t2==t3)
31         {printf("-1"); exit(0);}
32 }
33 int main ()
34 {
35     register int i;
36     n=read(),k=read();
37     for(i=1;i<=k;i++)
38     {
39         t1=read(),t2=read(),t3=read();
40         if(t1==1) link(t2,t3,0),link(t3,t2,0);
41         else if(t1==2) link(t2,t3,1);
42         else if(t1==3) link(t3,t2,0);
43         else if(t1==4) link(t3,t2,1);
44         else link(t2,t3,0); SBData();
45     }
46     for(i=1;i<=n;i++)
47         qs.push(i),dis[i]=vis[i]=1,inq[i]=true;
48     while(!qs.empty())
49     {
50         int tn=qs.front();
51         qs.pop(),inq[tn]=false;
52         for(i=p[tn];i;i=noww[i])
53             if(dis[goal[i]]<dis[tn]+val[i])
54             {
55                 dis[goal[i]]=dis[tn]+val[i];
56                 if(!inq[goal[i]])
57                 {
58                     if(++vis[goal[i]]>n) {printf("-1"); return 0;}
59                     qs.push(goal[i]),inq[goal[i]]=true;
60                 }
61             }
62     }
63     for(i=1;i<=n;i++) ans+=dis[i];
64     printf("%lld",ans);
65     return 0;
66 }

原文地址:https://www.cnblogs.com/ydnhaha/p/9726870.html

时间: 2024-08-29 17:23:58

解题:SCOI 2011 糖果的相关文章

BZOJ 2330 SCOI 2011 糖果

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

CDOJ 435 (SCOI 2011) 糖果 Label:差分约束系统

糖果 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 131072/131072KB (Java/Others) Submit Status 幼儿园里有NN个小朋友,lxhgww老师现在想要给这些小朋友们分配糖果,要求每个小朋友都要分到糖果.但是小朋友们也有嫉妒心,总是会提出一些要求,比如小明不希望小红分到的糖果比他的多,于是在分配糖果的时候,lxhgww需要满足小朋友们的K个要求.幼儿园的糖果总是有限的,lxhgww想知道他至少需

BZOJ 2330 SCOI 2011 糖果 差分约束系统

题目大意:幼儿园老师给小盆友们发糖果.有5种要求,问老师最少需要准备多少糖果.如不能满足,输出-1. 思路:裸地差分约束系统,但是正向加边会T,需要反向加边. CODE: #include <queue> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #define MAX 400010 using namespace std; int

[SCOI 2011]糖果

Description 题库链接 给出 \(N\) 个节点,节点有正点权, \(K\) 个三元组 \((X,A,B)\) 来描述节点点权之间的关系. 如果 \(X=1\) , 表示 \(A\) 的点权必须和 \(B\) 的点权相等: 如果 \(X=2\) , 表示 \(A\) 的点权必须小于 \(B\) 的点权: 如果 \(X=3\) , 表示 \(A\) 的点权必须不小于 \(B\) 的点权: 如果 \(X=4\) , 表示 \(A\) 的点权必须大于 \(B\) 的点权: 如果 \(X=5\

BZOJ 2333 SCOI 2011 棘手的操作 可并堆

做此题的原因 题号美 题目大意 给出一个序列,支持一堆操作(具体看下面).让你维护它. 思路 U x y:我们需要可并堆来将两个堆合并. A1 x v:将这个点从堆中拽出来,改了之后再合并回去. A2 x v:在堆顶打标记. A3:记录一个全局变量记录. F1 x:将这个点到堆顶的链上的所有标记下传,之后返回自己的大小. F2 x:返回堆顶. F3:用一个堆(set也行)维护所有堆顶的元素.需要仔细讨论一下. CODE #define _CRT_SECURE_NO_WARNINGS #inclu

解题:SCOI 2007 蜥蜴

题面 拆点跑最大流 所有能跑出去的点连向汇点,容量为inf 原点连向所有初始有蜥蜴的点,容量为1 每根柱子拆成两个点"入口"和"出口",入口向出口连容量为高度的边,出口向别的有高度的柱子的入口连容量为高度的边 1 #include<cmath> 2 #include<cstdio> 3 #include<cstring> 4 #include<algorithm> 5 using namespace std; 6 co

【学习】差分约束

今天%你赛考了差分约束相关,于是发现又有忘了的东西,复习 0x00 差分约束 差分约束是求解N元一次特殊不等式组的一种方法.差分约束系统包含$N$个变量和$M$个约束条件,每个约束条件都是一个关于其中两个变量的一个一次不等式 ,每个不等式形如$x[i]-x[j]≤a[k]$,$x[i],x[j]$为变量,$a[k]$为常数. 引理:若${Xi}$为差分约束系统的一组解,$?$为任意常数,那么${Xi+?}$也是一组解. 0x10 最短路 差分约束系统中的每个不等式都与最短路中的三角形不等式$di

分糖果_解题报告_SSL2339_tyvj1083_spfa

Description 童年的我们,将和朋友分享美好的事物作为自己的快乐.这天,C小朋友得到了Plenty of candies,将要把这些糖果分给要好的朋友们.已知糖果从一个人传给另一个人需要1 秒的时间,同一个小朋友不会重复接受糖果.由于糖果足够多,如果某时刻某小朋友接受了糖果,他会将糖果分成若干份,分给那些在他身旁且还没有得到糖果的小朋友们,而且自己会吃一些糖果.由于嘴馋,小朋友们等不及将糖果发完,会在得到糖果后边吃边发.每个小朋友从接受糖果到吃完糖果需要m秒的时间.那么,如果第一秒C小朋

NOIp 2011 Day1 解题报告

1.    铺地毯 送分题…… 枚举给定矩形,判定给定点是否在矩形内.求出标号最大的哪个矩形即可. 复杂度O(N) 1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 #include<cmath> 5 #include<algorithm> 6 using namespace std; 7 8 //variable// 9 int n,a[10010],b[10010],g