HDU 4598 Difference
由|ai| < T for all i and ,(vi, vj) in E <=> |ai - aj| >= T,可知,相邻的边都是一正一负,dfs判断是否成立
差分约束判断是否有解,根据(vi, vj) in E <=> |ai - aj| >= T得,map[i][j]=0,|ai-aj|<T,map[i][j]=1,|ai-aj||>=T;|ai|<T,建图求解
#include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<string>
#include<queue>
#define N 305
#define M 90005
#define INF 1<<29
using namespace std;
int map[N][N],cnt,head[N],vis[N],index[N],n,dis[N],mark[N];
struct edge{int v,next,w;
}e[M];
void init(){memset(head,-1,sizeof(head));memset(index,0,sizeof(index));for(int i=1;i<=n;i++)dis[i]=INF;cnt=0;memset(vis,0,sizeof(vis));
}
void addedge(int u,int v,int w){e[cnt].v=v;e[cnt].w=w;e[cnt].next=head[u];head[u]=cnt++;
}
bool SPFA(int u){queue<int> q;int i,v,w;q.push(u);dis[u]=0;while(!q.empty()){u=q.front();q.pop();vis[u]=0;for(i=head[u];i!=-1;i=e[i].next){v=e[i].v;w=e[i].w;if(dis[u]+w<dis[v]){dis[v]=dis[u]+w;if(!vis[v]){vis[v]=1;q.push(v);if(++index[v]>n)return false;}}}}return true;
}
bool judge(int u){for(int i=1;i<=n;i++){if(map[u][i]){if(mark[i]==-1){mark[i]=1-mark[u];if(!judge(i))return false;}else {if(mark[i]==mark[u])return false;}}}return true;
}
int main()
{int i,j,t;char str[N];scanf("%d",&t);while(t--){scanf("%d",&n);init();memset(mark,-1,sizeof(mark));for(i=1;i<=n;i++){scanf("%s",str);for(j=1;j<=n;j++){map[i][j]=str[j-1]-'0';}}mark[1]=0;if(!judge(1)){printf("No\n");continue;}for(i=1;i<=n;i++){for(j=1;j<=n;j++){if(map[i][j]==1){if(mark[i])addedge(i,j,-N);elseaddedge(j,i,-N);}else {if(mark[i])addedge(i,j,N-1);elseaddedge(j,i,N-1);}}}for(i=1;i<=n;i++){addedge(0,i,N-1);}if(SPFA(0)){printf("Yes\n");}else {printf("No\n");}}return 0;
}
HDU 4598 Difference相关推荐
- HDU - 4598 Difference
题意: 有一个图,给图上每个顶点都赋一个实数Ai.如果存在一个正整数T满足下面两个条件,这个图就是一个"difference". |Ai| <= T. (vi, vj) in ...
- HDU 4598 Difference 差分约束 + 判奇圈
题意:给你一个无向图 这个图是difference的如果存在一个正实数T使得图中所有的点的绝对值|ai|<T 并且点i j构成一条边当且仅当|ai-aj|>=T 问你是否存在一个这样的图 ...
- hdu 4598 Difference(奇圈判定+差分约束)
这是通化邀请赛的题,当时比赛的时候还完全没想法呢,看来这几个月的训练还是有效果的... 题意要求(1) |ai| < T for all i (2) (vi, vj) in E <=& ...
- 【HDU 5936 --- Difference】折半枚举+二分
[HDU 5936 --- Difference]折半枚举+二分 Description Little Ruins is playing a number game, first he chooses ...
- HDU 5486 Difference of Clustering 图论
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5486 题意: 给你每个元素一开始所属的集合和最后所属的集合,问有多少次集合的分离操作,并操作和不变操 ...
- HDU 5936 Difference
题意: 有一个函数f(y, k) = y的每个十进制位上的数字的k次幂之和 给x, k 求 有多少个y满足 x = f(y, k) - y 思路: (据说这叫中途相遇法?) 由于 x >= 0 ...
- hdu 4715 Difference Between Primes 2013年ICPC热身赛A题 素数水题
题意:给出一个偶数(不论正负),求出两个素数a,b,能够满足 a-b=x,素数在1e6以内. 只要用筛选法打出素数表,枚举查询下就行了. 我用set储存素数,然后遍历set里面的元素,查询+x后是否还 ...
- hdu 4598 差分约束
思路:首先就是判断是否有奇环,若存在奇环,则输出No. 然后用差分约束找是否符合条件. 对于e(i,j)属于E,并且假设顶点v[i]为正数,那么v[i]-v[j]>=T--->v[j]-v ...
- 苹果阻止升级插件ios12_苹果推出iOS 14,具有小部件和多项应用程序升级
苹果阻止升级插件ios12 It's safe to say that iOS 13 has been troublesome at best. The latest iPhone software ...
最新文章
- c# 读hex_c#十六进制到位转换(c# hex to bit conversion)
- html 滚动条向下滚动,如何实现元素随着滚动条向下滑动逐渐变小
- 一个人越来越有出息的7大迹象
- SmartGit破解方法
- mac的python怎么输入中文_无法在python IDE(Mac OS X)中输入unicode
- python画圆形螺旋线_中秋节到了,送你一个Python做的Crossin牌“月饼”
- Linux下打包qt程序,可以发布到一台纯净的linux发行版系统上
- 在latex中使用GB/T 7714—2015参考文献著录规则
- Springboot入门级教程详解
- 科幻文学入门指南(专业读者分享)
- Markdown|书单
- PHP接入微信官方支付(native·APIv3)
- okhttp3与okhttp的区别
- maven打包将依赖jar也打包的方法
- Wavelets: Seeing the forest and the trees
- 前端开发者不得不知的ES6十大特性
- html天猫双十一倒计时代码,天猫双十一 :倒计时篇
- 钢材理论重量计算公式大全
- PHP 模板引擎SMARTY 原理
- String数组转Long数组