BZOJ 3436: 小K的農場 差分約束

來源:互聯網
上載者:User

標籤:

3436: 小K的農場Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 443  Solved: 220
[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一樣多輸出格式

 

Output

    如果存在某種情況與小K的記憶吻合,輸出”Yes”,否則輸出”No”

 

Sample Input 33
312
1131
2232

Sample Output
Yes

範例解釋

三個農場種植的數量可以為(2,2,1)。
 題解:就愛搜刮q神的姿勢,這題是差分約束
/**************************************************************    Problem: 3436    User: 1085422276    Language: C++    Result: Wrong_Answer****************************************************************/ #include<iostream>#include<cstdio>#include<cstring>#include<string>#include<algorithm>#include<queue>#include<cmath>#include<map>using namespace std ;typedef long long ll;#define inf 100000#define maxn 10000+5inline ll read(){    ll x=0,f=1;char ch=getchar();    while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}    while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}    return x*f;}//******************************************************************struct ss{int to,v;};vector<ss >G[maxn];int flag=0,vis[maxn],dis[maxn];int n,m;void dfs(int x){    vis[x]=1;    for(int i=0;i<G[x].size();i++)    {        if(dis[G[x][i].to]>dis[x]+G[x][i].v)        {            if(vis[G[x][i].to])            {                flag=1;                return ;            }           dis[G[x][i].to]=dis[x]+G[x][i].v;           dfs(G[x][i].to);          // vis[G[x][i].to]=1;        }    }    vis[x]=0;}int main(){     scanf("%d%d",&n,&m);    for(int i=1;i<=n;i++)    {        int t=read();        int a,b,c;        if(t==3)        {           scanf("%d%d",&a,&b);           G[a].push_back((ss){b,0});        }else if(t==1){           scanf("%d%d%d",&a,&b,&c);           G[a].push_back((ss){b,-c});        }        else {            scanf("%d%d%d",&a,&b,&c);            G[b].push_back((ss){a,c});        }    }    flag=0;    memset(dis,127,sizeof(dis));    for(int i=1;i<=n;i++){        dis[i]=0;        dfs(i);        if(flag){            cout<<"No"<<endl;return 0;        }    }    cout<<"Yes"<<endl;    return 0;}
代碼

 

 

BZOJ 3436: 小K的農場 差分約束

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.