一文搞懂:【bzoj】3436小K的农场

简介: 一文搞懂:【bzoj】3436小K的农场

【题目描述】


小K在MC里面建立很多很多的农场,总共n个,以至于他自己都忘记了每个农场中种植作物的具体数量//代码效果参考:http://www.lyjsj.net.cn/wz/art_24259.html

了,他只记得一些含糊的信息(共m个),以下列三种形式描述:农场a比农场b至少多种植了c个单位的作物,农场a比农场b至多多种植了c个单位的作物,农场a与农场b种植的作物数一样多。但是,由于小K的记忆有些偏差,所以他想要知道存不存在一种情况,使得农场的种植作物数量与他记忆中的所有信息吻合。

【输入格式】 farm.in


第一行包括两个整数n和m,分别表示农场数目和小K记忆中的信息数目。


接下来m行:


如果每行的第一个数是1,接下来有3个整数a,b,c,表示农场a比农场b至少多种植了c个单位的作物。


如果每行的第一个数是2,接下来有3个整数a,b,c,表示农场a比农场b至多多种植了c个单位的作物。


如果每行第一个数是3,家下来有2个整数a,b,表示农场a终止的数量和b一样多。


【输出格式】 farm.out


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


【样例输入】


3 3


3 1 2


1 1 3 1


2 2 3 2


【样例输出】


Yes


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


对于100%的数据 1<=n,m,a,b,c<=10000.


裸的spfa_dfs判负环


1 #include


2 #include


3 using namespace std;


4


5 struct Edge


6 {


7 int to,w,next;


8 }E【10000001】;


9 int node=0,head【10001】,dist【10001】;


10 bool vis【10001】;


11


12 int n,m;


13 bool flag;


14


15 void insert(int u,int v,int w)


16 {


17 E【++node】=(Edge){v,w,head【u】};


18 head【u】=node;


19 }


20


21 void spfa_dfs(int s)


22 {


23 vis【s】=1;


24 for(int i=head【s】;i;i=E【i】.next)


25 {


26 int to=E【i】.to,w=E【i】.w;


27 if(dist【s】+w[span style="color: rgba(0, 0, 0, 1)">dist【to】)


28 {


29 if(vis【to】){flag=1;return;}


30 else


31 {


32 dist【to】=dist【s】+w;


33 spfa_dfs(to);


34 }


35 }


36 }


37 vis【s】=0;


38 }


39


40 bool check()


41 {


42 flag=0;


43 memset(dist,0x7f,sizeof(dist));


44 memset(vis,0,sizeof(vis));


45 for(int i=1;i<=n;i++)


46 {


47 dist【i】=0;


48 spfa_dfs(i);


49 if(flag) return 1;


50 }


51 return 0;


52 }


53


54 int read()


55 {


56 int x=0,f=1;char ch=getchar();


57 while(ch[span style="color: rgba(128, 0, 0, 1)">'0'||ch>'9'){if(ch=='-')f=-f;ch=getchar();}


58 while(ch>='0'&&ch<='9'){x=x10+ch-'0';ch=getchar();}


59 return xf;


60 }


61


62 int main()


63 {


64 n=read();m=read();


6//代码效果参考:http://www.lyjsj.net.cn/wz/art_24257.html

5 for(int i=1;i<=m;i++)

66 {


67 int f,a,b,c;


68 f=read();


69 switch(f)


70 {


71 case 1:


72 a=read();b=read();c=read();


73 insert(a,b,-c);


74 break;


75 case 2:


76 a=read();b=read();c=read();


77 insert(b,a,c);


78 break;


79 case 3:


80 a=read();b=read();


//代码效果参考:http://www.lyjsj.net.cn/wx/art_24255.html

81 insert(a,b,0);

82 insert(b,a,0);


83 break;


84 }


85 }


86 if(check()) printf("No");


87 else printf("Yes");


88 return 0;


89 }

相关文章
|
1月前
|
存储 算法
【随想】每日两题Day.20(实则一题)
【随想】每日两题Day.20(实则一题)
21 0
|
1月前
【随想】每日两题Day.3(实则一题)
【随想】每日两题Day.3
18 0
|
1月前
【随想】每日两题Day.16(实则一题)
【随想】每日两题Day.16(实则一题)
21 0
|
1月前
|
存储
【随想】每日两题Day.10(实则一题)
【随想】每日两题Day.10(实则一题)
20 0
|
1月前
【随想】每日两题Day.5 (实则一题)
【随想】每日两题Day.5
18 0
|
算法 C++ Python
【每日算法Day 68】脑筋急转弯:只要一行代码,但你会证吗?
【每日算法Day 68】脑筋急转弯:只要一行代码,但你会证吗?
四道好题分享(看似简单,但是棘手)
四道好题分享(看似简单,但是棘手)
77 0
|
存储 人工智能 算法
蓝桥杯十大常见天阶功法——炎之呼吸.叁之型.动态规划--(上篇)
蓝桥杯十大常见天阶功法——炎之呼吸.叁之型.动态规划--(上篇)
185 0
蓝桥杯十大常见天阶功法——炎之呼吸.叁之型.动态规划--(上篇)
|
机器学习/深度学习 人工智能
把所有的谎言献给你β(找规律数学题)
梓川咲太的面前坐着野兔先辈,作为约定,只好乖乖的打开笔记本开始学习了。 “加法符号写歪了,变成了乘法符号,在算式的第三行那个地方。”樱岛麻衣突然开口。
120 0
把所有的谎言献给你β(找规律数学题)