由|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相关推荐

  1. HDU - 4598 Difference

    题意: 有一个图,给图上每个顶点都赋一个实数Ai.如果存在一个正整数T满足下面两个条件,这个图就是一个"difference". |Ai| <= T. (vi, vj) in ...

  2. HDU 4598 Difference 差分约束 + 判奇圈

    题意:给你一个无向图 这个图是difference的如果存在一个正实数T使得图中所有的点的绝对值|ai|<T 并且点i j构成一条边当且仅当|ai-aj|>=T 问你是否存在一个这样的图 ...

  3. hdu 4598 Difference(奇圈判定+差分约束)

    这是通化邀请赛的题,当时比赛的时候还完全没想法呢,看来这几个月的训练还是有效果的... 题意要求(1) |ai| < T for all i   (2) (vi, vj) in E <=& ...

  4. 【HDU 5936 --- Difference】折半枚举+二分

    [HDU 5936 --- Difference]折半枚举+二分 Description Little Ruins is playing a number game, first he chooses ...

  5. HDU 5486 Difference of Clustering 图论

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5486 题意: 给你每个元素一开始所属的集合和最后所属的集合,问有多少次集合的分离操作,并操作和不变操 ...

  6. HDU 5936 Difference

    题意: 有一个函数f(y, k) = y的每个十进制位上的数字的k次幂之和 给x, k 求 有多少个y满足 x = f(y, k) - y 思路: (据说这叫中途相遇法?) 由于 x >= 0 ...

  7. hdu 4715 Difference Between Primes 2013年ICPC热身赛A题 素数水题

    题意:给出一个偶数(不论正负),求出两个素数a,b,能够满足 a-b=x,素数在1e6以内. 只要用筛选法打出素数表,枚举查询下就行了. 我用set储存素数,然后遍历set里面的元素,查询+x后是否还 ...

  8. hdu 4598 差分约束

    思路:首先就是判断是否有奇环,若存在奇环,则输出No. 然后用差分约束找是否符合条件. 对于e(i,j)属于E,并且假设顶点v[i]为正数,那么v[i]-v[j]>=T--->v[j]-v ...

  9. 苹果阻止升级插件ios12_苹果推出iOS 14,具有小部件和多项应用程序升级

    苹果阻止升级插件ios12 It's safe to say that iOS 13 has been troublesome at best. The latest iPhone software ...

最新文章

  1. c# 读hex_c#十六进制到位转换(c# hex to bit conversion)
  2. html 滚动条向下滚动,如何实现元素随着滚动条向下滑动逐渐变小
  3. 一个人越来越有出息的7大迹象
  4. SmartGit破解方法
  5. mac的python怎么输入中文_无法在python IDE(Mac OS X)中输入unicode
  6. python画圆形螺旋线_中秋节到了,送你一个Python做的Crossin牌“月饼”
  7. Linux下打包qt程序,可以发布到一台纯净的linux发行版系统上
  8. 在latex中使用GB/T 7714—2015参考文献著录规则
  9. Springboot入门级教程详解
  10. 科幻文学入门指南(专业读者分享)
  11. Markdown|书单
  12. PHP接入微信官方支付(native·APIv3)
  13. okhttp3与okhttp的区别
  14. maven打包将依赖jar也打包的方法
  15. Wavelets: Seeing the forest and the trees
  16. 前端开发者不得不知的ES6十大特性
  17. html天猫双十一倒计时代码,天猫双十一 :倒计时篇
  18. 钢材理论重量计算公式大全
  19. PHP 模板引擎SMARTY 原理
  20. String数组转Long数组

热门文章

  1. 网线的水晶头做法568a,568b
  2. 超全Redis命令总结(备忘)(建议赶紧收藏)
  3. PS基础 之 图层样式的使用
  4. 樊登读书分享ppt_樊登读书会
  5. 三维建筑动画的制作流程
  6. 高德地图截屏、标记鼠标跟随示例
  7. oracle大数据量查询超时排查
  8. w10系统老是自动息屏_win10关闭屏幕后黑屏无法唤醒?你一定要学会这几招解决方法...
  9. 【毕业设计】 stm32智能运动计步系统 - 物联网 嵌入式 单片机
  10. 怎么在多层循环中直接跳出循环