bzoj2330 [SCOI2011]糖果
来源:互联网 发布:上古世纪捏脸数据大全 编辑:程序博客网 时间:2024/05/22 14:04
题目
该怎么说呢???
这可是一道差分约束系统裸题。
如果a小于b,则连一条a到b长度为1的边,相等的话,就连a到b与b到a长度为0的边。
最后,spfa跑一遍最长路就是答案,注意可能会有环。
#include<bits/stdc++.h>#define N 100005using namespace std;int n,k,x,y,opt,dis[N+1];long long ans;int first[N+1],nex[3*N+1],to[3*N+1],val[3*N+1],siz;int Q[N+1],l,r;bool vis[N+1];void add(int x,int y,int z){ nex[siz]=first[x]; first[x]=siz; to[siz]=y; val[siz]=z; siz++;}inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fread(buf,1,100000,stdin),p1==p2)?EOF:*p1++;}inline int read(){ int x=0,b=1; char c=nc(); for(;!(c<='9'&&c>='0');c=nc())if(c=='-')b=-1; for(;c<='9'&&c>='0';c=nc())x=x*10+c-'0'; return x*b;}bool spfa(){ vis[0]=true,l=0,r=1,Q[0]=0; while(l!=r) { x=Q[l++];if(l==N)l=0; vis[x]=false; if(dis[x]>n)return false; for(int i=first[x];i!=-1;i=nex[i]) { int u=to[i]; if(dis[u]<dis[x]+val[i]) { dis[u]=dis[x]+val[i]; if(vis[u])continue; vis[u]=true,Q[r++]=u; if(r==N)r=0; } } } return true;}int main(){ //freopen("in.txt","r",stdin); memset(first,-1,sizeof(first)); n=read(),k=read(); for(int i=1;i<=k;i++) { opt=read(),x=read(),y=read(); if(opt==1)add(x,y,0),add(y,x,0); if(opt==2)if(x==y){ cout<<-1; return 0; }else add(x,y,1); if(opt==3)add(y,x,0); if(opt==4)if(x==y){ cout<<-1; return 0; }else add(y,x,1); if(opt==5)add(x,y,0); } for(int i=n;i>=1;i--)add(0,i,1); if(!spfa())cout<<-1; else { ans=0; for(int i=1;i<=n;i++)ans+=dis[i]; cout<<ans; } return 0;}
貌似有更快的算法,tarjan缩点后跑dp,是O(n)的,很优吧。
不过,我的代码还是很快的呀。
阅读全文
0 0
- bzoj2330 [SCOI2011]糖果题解
- [BZOJ2330][SCOI2011]糖果
- [BZOJ2330][SCOI2011]糖果
- bzoj2330 [SCOI2011]糖果
- bzoj2330【SCOI2011】糖果
- 12.7 bzoj2330 [SCOI2011]糖果
- [题解]bzoj2330(SCOI2011)糖果
- 【bzoj2330】[SCOI2011]糖果
- bzoj2330: [SCOI2011]糖果
- 【bzoj2330】[SCOI2011]糖果
- bzoj2330[SCOI2011]糖果
- bzoj2330 [SCOI2011]糖果
- 【bzoj2330】【P3275 】【SCOI2011】糖果
- bzoj2330: [SCOI2011]糖果
- BZOJ2330: [SCOI2011]糖果
- [SCOI2011]糖果 bzoj2330 洛谷 P3275
- bzoj2330 [SCOI2011]糖果 差分约束
- 【差分约束】[SCOI2011] bzoj2330 糖果
- Mysql导入与导出
- bzoj1878 [SDOI2009]HH的项链
- 《慕课网玩转算法面试》笔记及习题解答8.1~8.3
- laravel中用到的函数和语法
- PHP设计模式之单例模式
- bzoj2330 [SCOI2011]糖果
- Leetcode c语言-Integer to Roman
- bzoj2563 阿狸和桃子的游戏
- PAT 1023. Have Fun with Numbers (20) 模拟大数乘法
- session自动更新 购物车条目 原因:本质是,对 内存和磁盘的区别,以及session是个内存中的map,不清楚
- Elasticsearch-rtf/head/npm/cnpm
- bzoj3293 [Cqoi2011]分金币
- spring 事务杂谈
- bzoj4326 NOIP2015 运输计划