zoukankan      html  css  js  c++  java
  • BZOJ 2330: [SCOI2011]糖果

    Description

     

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

     

    Input

    输入的第一行是两个整数NK

    接下来K行,表示这些点需要满足的关系,每行3个数字,XAB

    如果X=1, 表示第A个小朋友分到的糖果必须和第B个小朋友分到的糖果一样多;

    如果X=2, 表示第A个小朋友分到的糖果必须少于第B个小朋友分到的糖果;

    如果X=3, 表示第A个小朋友分到的糖果必须不少于第B个小朋友分到的糖果;

    如果X=4, 表示第A个小朋友分到的糖果必须多于第B个小朋友分到的糖果;

    如果X=5, 表示第A个小朋友分到的糖果必须不多于第B个小朋友分到的糖果;

     

    Output

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

     

    Sample Input

    5 7

    1 1 2

    2 3 2

    4 4 1

    3 4 5

    5 4 5

    2 3 5

    4 5 1

    Sample Output


    11

    HINT

    【数据范围】


        对于30%的数据,保证 N<=100


        对于100%的数据,保证 N<=100000


    对于所有的数据,保证 K<=100000,1<=X<=5,1<=A, B<=N

      1 /**************************************************************
      2     Problem: 2330
      3     User: Hammer_cwz_77
      4     Language: C++
      5     Result: Accepted
      6     Time:348 ms
      7     Memory:46376 kb
      8 ****************************************************************/
      9 
     10 // luogu-judger-enable-o2
     11 #include<bits/stdc++.h>
     12 using namespace std;
     13 typedef long long ll;
     14 const int maxn=1000000+5; 
     15 
     16 inline void read(int& x)
     17 {
     18    x=0;
     19    register char f=getchar(),c=0;
     20    while(!isdigit(f)&&f!='-')f=getchar();if(f=='-')c=1,f=getchar();
     21    while(isdigit(f))x=x*10+(f^48),f=getchar();if(c)x=~x+1;
     22 }
     23 
     24 struct node{
     25     int net;
     26     int to;
     27     int w;
     28 }a[maxn*3];
     29 int head[maxn],dis[maxn],cnt,n,k;
     30 bool vis[maxn];
     31 ll ans;
     32 
     33 inline void add(int i,int j,int w)
     34 {
     35     a[++cnt].to=j;
     36     a[cnt].net=head[i];
     37     a[cnt].w=w;
     38     head[i]=cnt;
     39 }
     40 
     41 inline bool spfa(int s)
     42 {
     43     vis[s]=true;
     44     for(int i=head[s];i;i=a[i].net)
     45     {
     46         int v=a[i].to;
     47         if(dis[v]>dis[s]+a[i].w)    
     48         {
     49             dis[v]=dis[s]+a[i].w;
     50             if(vis[v]||!spfa(v))
     51             {
     52                 return false;
     53             }
     54         }
     55     }
     56     vis[s]=false;
     57     return true;
     58 }
     59 
     60 int main()
     61 {
     62     memset(dis,0x3f,sizeof(dis));
     63     read(n);
     64     read(k);
     65     dis[0]=0;
     66     for(int i=n;i>=1;--i)
     67         add(0,i,-1);
     68     for(int i=1;i<=k;i++)
     69     {
     70         int aa,b,c;
     71         read(aa);
     72         read(b);
     73         read(c);
     74         if(aa==1)
     75         {
     76             add(b,c,0);
     77             add(c,b,0);
     78         }
     79         if(aa==2)
     80         {
     81             add(b,c,-1);
     82         }
     83         if(aa==3)
     84         {
     85             add(c,b,0);
     86         }
     87         if(aa==4)
     88         {
     89             add(c,b,-1);
     90         }
     91         if(aa==5)
     92         {
     93             add(b,c,0);
     94         }
     95         if(aa%2==0&&b==c)
     96         {
     97             printf("-1
    ");
     98             return 0;
     99         }
    100     }
    101     if(spfa(0))
    102     {
    103         for(int i=1;i<=n;i++)
    104         {
    105             ans-=dis[i];
    106         }
    107         printf("%lld
    ",ans);
    108         return 0;
    109     }
    110     cout<<-1<<endl;
    111     return 0;
    112 }
  • 相关阅读:
    pktgen使用指南
    常见的网卡调优
    网络PPS测试
    网络性能测试工具qperf
    设置虚拟机静态IP
    superset填坑
    js格式化
    《你不知道的JavaScript》读书笔记(一):JS是如何查找变量的
    技术分享PPT整理(三):网页渲染流程
    技术分享PPT整理(二):C#常用类型与数据结构
  • 原文地址:https://www.cnblogs.com/Hammer-cwz-77/p/8511317.html
Copyright © 2011-2022 走看看