• BZOJ3436 小K的农场


    3436: 小K的农场

    Time Limit: 10 Sec  Memory Limit: 128 MB
    Submit: 1761  Solved: 785
    [Submit][Status][Discuss]

    Description

    背景
    小K是个特么喜欢玩MC的孩纸。。。
    描述
    小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量了,他只记得
    一些含糊的信息(共m个),以下列三种形式描述:农场a比农场b至少多种植了c个单位的作物,农场a比农场b至多
    多种植了c个单位的作物,农场a与农场b种植的作物数一样多。但是,由于小K的记忆有些偏差,所以他想要知道存
    不存在一种情况,使得农场的种植作物数量与他记忆中的所有信息吻合。

    Input

    第一行包括两个整数n和m,分别表示农场数目和小K记忆中的信息的数目接下来m行:如果每行的第一个数是1,接
    下来有三个整数a,b,c,表示农场a比农场b至少多种植了c个单位的作物如果每行第一个数是2,接下来有三个整数a
    ,b,c,表示农场a比农场b至多多种植了c个单位的作物如果每行第一个数是3,接下来有两个整数a,b,表示农场a
    种植的数量与b一样。1<=n,m,a,b,c<=10000

    Output

    如果存在某种情况与小K的记忆吻合,输出”Yes”,否则输出”No”

    Sample Input

    3 3
    3 1 2
    1 1 3 1
    2 2 3 2

    Sample Output

    Yes
    样例解释
    三个农场种植的数量可以为(2,2,1)

    HINT

     

    Source

    用bellmen_ford进行判环

    废话不说了

    直接上代码

    #include <bits/stdc++.h>
    #define ll long long
    #define inf 100000010
    using namespace std;
    inline int read(){
      int x=0;int f=1;char ch=getchar();
      while(!isdigit(ch)) {if(ch=='-') f=-1;ch=getchar();}
      while(isdigit(ch)) {x=x*10+ch-'0';ch=getchar();}
      return x*f;
    }
    const int MAXN=1e6+10;
    namespace zhangenming{
        struct node{
          int x,y,v;
        }e[MAXN];
        int dis[MAXN],len,n,m;
        inline void insert(int xx,int yy,int vv){
           e[++len].x=xx;
           e[len].y=yy;
           e[len].v=vv;
        }
        int bellman_ford(){
        int flag;memset(dis,10,sizeof(dis));
        for(int i=1;i<n;i++){
          flag=1;
          for(int j=1;j<=len;j++){
            if(dis[e[j].y]>dis[e[j].x]+e[j].v){
                dis[e[j].y]=dis[e[j].x]+e[j].v;flag=0;
            }
          }
          if(flag) break;
        }
        for(int j=1;j<=len;j++){
           if(dis[e[j].y]>dis[e[j].x]+e[j].v) return 0;
        }
        return 1;
       }
       void init(){
         n=read();m=read();
         while(m--){
            int x=read();
            if(x==3){
               int xx=read();int yy=read();
               insert(xx,yy,0);insert(yy,xx,0);
            }
            if(x==1){
               int xx=read();int yy=read();int vv=read();
               insert(xx,yy,-vv);
            }
            if(x==2){
                int xx=read();int yy=read();int vv=read();
                insert(xx,yy,vv);
            }
          }
       }
    }
    int main(){
        using namespace zhangenming;
        init();
        if(bellman_ford()) cout<<"Yes"<<endl;
        else cout<<"No"<<endl;
        return 0;
    }
    

      

  • 相关阅读:
    vue导入excel表格
    正则表达式:输入六位数或六位数以下的正整数。
    iview下拉框支持多选
    vue通过jquery方式获取元素
    获取对象属性
    原生JS获取元素,添加事件
    打印当前页面,关闭当前页面
    Andrew Ng 机器学习公开课
    机器学习4《朴素贝叶斯》
    机器学习3《数据集与k-近邻算法》
  • 原文地址:https://www.cnblogs.com/something-for-nothing/p/7787581.html
Copyright © 2020-2023  润新知