BZOJ 2788 Poi2012 Festival 差分约束+Tarjan+Floyd
来源:互联网 发布:数据仓库与数据集市 编辑:程序博客网 时间:2024/05/16 14:55
题目大意:给定
首先我们可以根据差分约束建图,Floyd跑最短路,判断是否无解
然后Tarjan缩点,显然不同强连通分量之间互不影响
一个强连通分量内的最多取值个数等于强连通分量两两之间最短路的最大值
证明:
由于边权只有
不妨设最短路的最大值为
不妨设
显然我们可以构造出一组解使得取值数
#include <vector>#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>#define M 660using namespace std;int n,m1,m2,ans;struct abcd{ int to,next;}table[200200];int head[M],tot;int f[M][M];int dpt[M],low[M],T;void Add(int x,int y){ table[++tot].to=y; table[tot].next=head[x]; head[x]=tot;}void Calculate(vector<int> &stack){ int i,j,re=0; for(i=0;i<(signed)stack.size();i++) for(j=0;j<(signed)stack.size();j++) re=max(re,f[stack[i]][stack[j]]); ans+=re+1;}void Tarjan(int x){ static int stack[M],top; static bool v[M]; int i; dpt[x]=low[x]=++T; stack[++top]=x; for(i=head[x];i;i=table[i].next) { if(v[table[i].to]) continue; if(dpt[table[i].to]) low[x]=min(low[x],dpt[table[i].to]); else Tarjan(table[i].to),low[x]=min(low[x],low[table[i].to]); } if(dpt[x]==low[x]) { int t; vector<int> *s=new vector<int>; do{ t=stack[top--]; v[t]=true; s->push_back(t); }while(t!=x); Calculate(*s); }}int main(){ int i,j,k,x,y; cin>>n>>m1>>m2; memset(f,0x3f,sizeof f); for(i=1;i<=m1;i++) { scanf("%d%d",&x,&y); Add(x,y);Add(y,x); f[x][y]=min(f[x][y],1); f[y][x]=min(f[y][x],-1); } for(i=1;i<=m2;i++) { scanf("%d%d",&x,&y); Add(y,x); f[y][x]=min(f[y][x],0); } for(i=1;i<=n;i++) f[i][i]=0; for(k=1;k<=n;k++) for(i=1;i<=n;i++) for(j=1;j<=n;j++) f[i][j]=min(f[i][j],f[i][k]+f[k][j]); for(i=1;i<=n;i++) if(f[i][i]<0) return puts("NIE"),0; for(i=1;i<=n;i++) if(!dpt[i]) Tarjan(i); cout<<ans<<endl; return 0;}
2 0
- BZOJ 2788 [Poi2012]Festival 差分约束+tarjan+floyd
- BZOJ 2788 Poi2012 Festival 差分约束+Tarjan+Floyd
- bzoj 2788 [Poi2012]Festival tarjan+floyd+差分约束
- [bzoj2788][Poi2012]Festival floyd 差分约束系统 tarjan
- bzoj2788 [Poi2012]Festival(差分约束+floyd+tarjan缩点)
- [BZOJ2788]-[Poi2012]Festival-差分约束+tarjan+floyd
- BZOJ 2788 Festival 详解(差分约束 tarjan floyd)
- [Poi2012]Festival 差分约束+tarjan
- bzoj 2788: [Poi2012]Festival (差分约束+最短路+tarjan)
- [BZOJ2788][Poi2012]Festival(差分约束+floyed+tarjan)
- bzoj 2788 / 洛谷3530 差分约束系统+floyd+tarjan
- BZOJ2788: [Poi2012]Festival 差分约束
- 差分约束+tarjin [Poi2012]Festival
- bzoj 2788(差分约束+tarjan)
- BZOJ 2788: [Poi2012]Festival
- [Poi2012] bzoj 2788 Festival
- BZOJ 2330 SCOI2011 糖果 差分约束
- 【差分约束】BZOJ 2330: [SCOI2011]糖果
- 一步一步粗谈linux文件系统(四)----挂载VFS
- C++解析JSON格式(JSONCpp库)
- redis 教程命令
- 初识JAVA
- postgreps:The database cluster initialisation failed
- BZOJ 2788 Poi2012 Festival 差分约束+Tarjan+Floyd
- WebRTC手记之本地音频采集
- 数据库连接池Druid
- LightOJ 1427 Substring Frequency (II)(AC自动机裸)
- &&在goto语句中的用法
- POJ 3273 Monthly Expense(最大化最小值)
- Linux终端调整输出色彩和光标位置的简单示例
- 装饰设计模式与缓冲区读写
- Js完美验证15/18身份证