【SCOI2011】【差分约束系统】糖果
来源:互联网 发布:excel数据图表插件 编辑:程序博客网 时间:2024/04/29 09:02
这道题应该是一道比较裸的差分约束系统。
按照题意建图:
1、如果A和B一样多-> 连边(A,B,0),(B,A,0)
2、如果A小于B ->连边(A,B,1)
3、如果A大于等于B ->连边(B,A,0)
4、如果A大于B-> 连边(B,A,1)
5、如果A小于等于B -> (A,B,0)
其中第2种情况和第4种情况要特判,若a == b则无解。
这样建好后用spfa求一次最长路就可以了。
代码:
#include<cstdio>#include<cstdlib>#include<algorithm>#include<cstring>using namespace std;const int maxn = 100000 + 10;const int maxm = maxn * 2;struct pnode{int d,w;pnode *next;pnode(){}pnode(int d,int w,pnode *next):d(d),w(w),next(next){}}*first[maxn],__[maxm],*tot = __;long long dis[maxn];int que[maxm],cnt[maxn];bool done[maxn];int l,r;int n,k;void init(){freopen("bzoj2330.in","r",stdin);freopen("bzoj2330.out","w",stdout);}bool spfa(){while(l < r){int u = que[l++];l %= maxm;done[u] = false;for(pnode *p = first[u];p != NULL;p = p -> next){int v = p -> d;if(dis[u] + p -> w > dis[v]){dis[v] = dis[u] + p -> w;if(++cnt[v] >= n)return false;if(!done[v]){done[v] = true;que[r++] = v;r %= maxm;}}}}return true;}void solve(){memset(done,false,sizeof(done));l = r = 0;for(int i = 1;i <= n;i++){dis[i] = 1;done[i] = true;que[r++] = i;}if(!spfa()){printf("-1\n");return;}long long ans = 0;for(int i = 1;i <= n;i++)ans += dis[i];printf("%lld\n",ans);}void readdata(){scanf("%d%d",&n,&k);for(int i = 1;i <= k;i++){int x,u,v;scanf("%d%d%d",&x,&u,&v);if(x == 1){first[u] = new(tot++)pnode(v,0,first[u]);first[v] = new(tot++)pnode(u,0,first[v]);}if(x == 2){if(u == v)printf("-1\n"),exit(0);first[u] = new(tot++)pnode(v,1,first[u]);}if(x == 3)first[v] = new(tot++)pnode(u,0,first[v]);if(x == 4){first[v] = new(tot++)pnode(u,1,first[v]);if(u == v)printf("-1\n"),exit(0);}if(x == 5)first[u] = new(tot++)pnode(v,0,first[u]);}}int main(){init();readdata();solve();return 0;}
- 【差分约束系统】【SCOI2011】分糖果
- 【SCOI2011】【差分约束系统】糖果
- 【差分约束系统】【SCOI2011】糖果 candy
- [BZOJ2330][SCOI2011]糖果 差分约束系统
- BZOJ2330(SCOI2011)[糖果]--差分约束系统
- 【SCOI2011】糖果 差分约束
- 【SCOI2011】糖果 差分约束
- bzoj 2330 [SCOI2011]糖果(差分约束系统)
- bzoj 2330: [SCOI2011]糖果 差分约束系统
- [SCOI2011]糖果 洛谷 3275 差分约束系统
- bzoj 2330 [SCOI2011]糖果[差分约束系统]
- 【BZOJ2330】【SCOI2011】糖果——差分约束系统+tarjan
- BZOJ 2330 [SCOI2011]糖果 差分约束系统
- bzoj2330 [SCOI2011]糖果 差分约束
- BZOJ 2330 SCOI2011 糖果 差分约束
- 【差分约束】[SCOI2011] bzoj2330 糖果
- [BZOJ2330]SCOI2011糖果|差分约束
- 【bzoj2330】【scoi2011】【糖果】【差分约束】
- Spring事务配置的五种方式和spring里面事务的传播属性和事务隔离级别
- 读《高性能建站指南》(上)
- QByteArray和python bytes之间的转换
- 词法分析器实验报告
- Linux 下如何查看C结构体等符号定义
- 【SCOI2011】【差分约束系统】糖果
- Extjs 学习 --Ext.grid.GridPanel()(一)
- HDU 4514 湫湫系列故事——设计风景线 (判环+求最大树直径)
- Android基于XMPP Smack Openfire下学习开发IM(三)会议室创建、加入以及查询会议室中所有成员等
- 一个IBM人的离职泪:伟大公司,SB老板,苦逼员工
- android 应用适配,提供可选的替代资源
- Java程序员面试中的多线程问题
- js时间选择控件
- 最美的时光——留给生命里,最美的四年(1)