博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[LUOGU] P3275 [SCOI2011]糖果
阅读量:6462 次
发布时间:2019-06-23

本文共 1873 字,大约阅读时间需要 6 分钟。

显然的差分约束,除了题目给出的约束以外,边界是\(A_x-A\geq1\)

判环有两种方法,要不就是SPFA记录最长路经过次数,要不就是tarjan缩了SCC,看SCC内有没有正权边

#include
#include
#include
#include
#include
#define int long longusing namespace std;inline int rd(){ int ret=0,f=1;char c; while(c=getchar(),!isdigit(c))f=c=='-'?-1:1; while(isdigit(c))ret=ret*10+c-'0',c=getchar(); return ret*f;}#define space() putchar(' ')#define nextline() putchar('\n')void pot(int x){if(!x)return;pot(x/10);putchar('0'+x%10);}void out(int x){if(!x)putchar('0');if(x<0)putchar('-'),x=-x;pot(x);}const int MAXN=4000005;int n,m;int nex[MAXN],to[MAXN],wi[MAXN];int ecnt,head[MAXN];inline void add(int x,int y,int w){// cout<
<<" "<
<<" "<
<
Q;bool spfa(int st){// memset(dis,0x3f,sizeof(dis)); dis[st]=0;Q.push(st); while(!Q.empty()){ int top=Q.front();Q.pop();inq[top]=0; cnt[top]++;if(cnt[top]>n) return 1; for(int i=head[top];i;i=nex[i]){ int v=to[i]; if(dis[top]+wi[i]>dis[v]){ dis[v]=dis[top]+wi[i]; if(!inq[v]) Q.push(v),inq[v]=1; } } } return 0;}int dfn[MAXN],low[MAXN],tim;int sta[MAXN],ins[MAXN],top; int bl[MAXN],scc;vector
vec[MAXN];void tarjan(int x){ dfn[x]=low[x]=++tim; ins[sta[++top]=x]=1; for(int i=head[x];i;i=nex[i]){ int v=to[i]; if(!dfn[v]){ tarjan(v); low[x]=min(low[x],low[v]); }else if(ins[v]){ low[x]=min(low[x],dfn[v]); } } if(dfn[x]!=low[x]) return; int elm=-1;++scc; do{ elm=sta[top--]; ins[elm]=0; bl[elm]=scc; vec[scc].push_back(elm); }while(elm!=x);}signed main(){ n=rd();m=rd(); int t,x,y; for(int i=1;i<=m;i++){ t=rd();x=rd();y=rd(); if(t==1) add(x,y,0),add(y,x,0); if(t==2) add(x,y,1); if(t==3) add(y,x,0); if(t==4) add(y,x,1); if(t==5) add(x,y,0); } for(int i=n;i>=1;i--) add(n+1,i,1); for(int i=1;i<=n+1;i++){ if(!dfn[i]) tarjan(i); } for(int i=1;i<=scc;i++){ int sz=vec[i].size(); for(int j=0;j

转载于:https://www.cnblogs.com/ghostcai/p/9836695.html

你可能感兴趣的文章
ios 不同sdk4.3 6.0版本号,关于方法的兼容性的通用方法
查看>>
Webstorm常用快捷键备忘
查看>>
js滚动加载到底部
查看>>
Virtualbox 虚拟机网络不通
查看>>
java概念基础笔记整理
查看>>
leetcode124二叉树最大路径和
查看>>
超级账本Fabric区块链用弹珠游戏Marbles 部署
查看>>
数据分析--数字找朋友
查看>>
18年selenium3+python3+unittest自动化测试教程(下)
查看>>
memcache数据库和redis数据库的区别(理论)
查看>>
我的友情链接
查看>>
MyBatis+Spring结合
查看>>
Office 365之SkyDrive Pro
查看>>
无缝滚动实现原理分析【公告栏】
查看>>
Java Web 高性能开发
查看>>
CentOS 4.4双网卡绑定,实现负载均衡
查看>>
Scala之柯里化和隐式转换
查看>>
获取androdmanifest里面的meta-data
查看>>
mysql拷贝表的几种方式
查看>>
健忘的正则
查看>>