[SCOI2011]糖果 [差分约束]

Posted lxyyyy

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[SCOI2011]糖果 [差分约束]相关的知识,希望对你有一定的参考价值。

 [SCOI2011]糖果   #2436. 「SCOI2011」糖果

存一下 懒得打了...

要注意每个小朋友都要分到糖 所以需要将其和0连一条边权为1的边 

还有俩一定不可能的情况

#include<bits/stdc++.h>
using namespace std;
#define Max(x,y) (x)>(y)?(x):(y)
#define Min(x,y) (x)>(y)?(y):(x)
#define ll long long
#define rg register
const int N=1e5+5,M=10000+5,inf=0x3f3f3f3f,P=99999997;
int n,m;
ll ans=0;
template <class t>void rd(t &x)
    x=0;int w=0;char ch=0;
    while(!isdigit(ch)) w|=ch==-,ch=getchar();
    while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
    x=w?-x:x;


int head[N],tot=0;
struct edgeint v,w,nxt;e[N<<2];
void add(int u,int v,int w)
    e[++tot]=(edge)v,w,head[u],head[u]=tot;


int dis[N],use[N];
bool vis[N];
void spfa(int x)
    memset(dis,-inf,sizeof(dis));
    deque<int>q;
    q.push_back(x),vis[x]=1,dis[x]=use[x]=0;
    while(!q.empty())
        int u=q.front();
        q.pop_front(),vis[u]=0;
        ++use[u];
        if(use[u]>=n) puts("-1");exit(0);
        for(int i=head[u],v,w;i;i=e[i].nxt)
            v=e[i].v,w=e[i].w;
            if(dis[v]<dis[u]+w)
                dis[v]=dis[u]+w;
                if(!vis[v])
                    if(q.empty()) q.push_back(v);
                    else if(dis[v]>dis[q.front()]) q.push_front(v);
                         else q.push_back(v);
                    vis[v]=1;
                
            
        
    


int main()
    freopen("in2.txt","r",stdin);
    rd(n),rd(m);
    for(int i=1,op,u,v;i<=m;++i)
        rd(op),rd(u),rd(v);
        if(op==1) add(u,v,0),add(v,u,0);
        else if(op==2)
            if(u==v) puts("-1");exit(0);
            add(u,v,1);
        
        else if(op==3) add(v,u,0);
        else if(op==4)
            if(u==v) puts("-1");exit(0);
            add(v,u,1);
         
        else if(op==5) add(u,v,0);
    
    for(int i=n;i;--i) add(0,i,1);
    spfa(0);
    for(int i=1;i<=n;++i) ans+=(ll)dis[i];
    printf("%lld",ans);
    return 0;

 

以上是关于[SCOI2011]糖果 [差分约束]的主要内容,如果未能解决你的问题,请参考以下文章

差分约束详解&&锣鼓SCOI2011糖果题解

bzoj 2330[SCOI2011]糖果 - 差分约束

[luoguP3275] [SCOI2011]糖果(差分约束)

bzoj2330: [SCOI2011]糖果(差分约束)

[SCOI2011]糖果(差分约束系统)

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