bzoj2330 [SCOI2011]糖果
2017-09-11 21:51
302 查看
题目
该怎么说呢???
这可是一道差分约束系统裸题。
如果a小于b,则连一条a到b长度为1的边,相等的话,就连a到b与b到a长度为0的边。
最后,spfa跑一遍最长路就是答案,注意可能会有环。
貌似有更快的算法,tarjan缩点后跑dp,是O(n)的,很优吧。
不过,我的代码还是很快的呀。
该怎么说呢???
这可是一道差分约束系统裸题。
如果a小于b,则连一条a到b长度为1的边,相等的话,就连a到b与b到a长度为0的边。
最后,spfa跑一遍最长路就是答案,注意可能会有环。
#include<bits/stdc++.h> #define N 100005 using 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)的,很优吧。
不过,我的代码还是很快的呀。
相关文章推荐
- bzoj 2330 [SCOI2011]糖果 差分约束模板
- BZOJ 2330 [SCOI2011]糖果
- 【差分约束】[SCOI2011] bzoj2330 糖果
- BZOJ2330 [SCOI2011]糖果 差分约束模板
- [差分约束系统] bzoj2330: [SCOI2011]糖果
- BZOJ 2330 [SCOI2011]糖果 ——差分约束系统 SPFA
- BZOJ2330[SCOI2011] 糖果 题解【差分约束】
- [BZOJ2330][SCOI2011]糖果(差分约束)
- BZOJ2330: [SCOI2011]糖果
- 差分约束——bzoj2330 scoi2011糖果
- 【bzoj 2330】[SCOI2011]糖果 差分约束
- BZOJ 2330[SCOI2011]糖果
- BZOJ 2330: [SCOI2011]糖果
- [BZOJ2330][SCOI2011]糖果
- 【bzoj2330】【scoi2011】【糖果】【差分约束】
- bzoj 2330 SCOI【2011】 糖果
- [BZOJ2330][SCOI2011]糖果 差分约束系统
- bzoj2330 [SCOI2011]糖果
- bzoj2330 [SCOI2011]糖果题解
- [BZOJ2330][SCOI2011]糖果(差分约束系统)