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

思路:一般见到不等式就要考虑考虑差分约束了 观察这个题的条件发现 每个点的绝对值都小于T 但是两个点的差值的绝对值却能够大于T 这只能是一种情况 那就是两个点一正一负 也就是要对其进行二分染色 如果存在奇环 则一定不存在这种图 还有就是这个题存在一个隐含的条件:i j构成一条边当且仅当|ai-aj|>=T 这句话的言外之意是 如果i j不构成边 则|ai-aj|<T 这个条件很难被发现- - 至于如何建图 如果i->j有一条边并且i为正 即ai - aj >= T 变形得 aj - ai <= -T 如果不存在i->j的边且i为正 则 ai - aj < T 变形得 ai - aj <= T-1 其余情况雷同 然后建图判断是否有负环即可

#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std;#define bug puts("bug")const int maxn = 300 + 10;
const int INF = 1e9;
const int maxe = 50000;
const int T = 1000;int n;
int g[maxn][maxn];
int STACK[maxn], top;
int dist[maxn], cnt[maxn], vis[maxn];
char G[maxn][maxn];
int color[maxn];struct Edge{int v, d;int next;Edge(int v = 0, int d = 0, int next = 0) : v(v), d(d), next(next) {}
};int Head[maxn], cntE;
Edge edge[maxe];void init(){memset(Head, -1, sizeof(Head));memset(vis, 0, sizeof(vis));memset(cnt, 0, sizeof(cnt));memset(color, 0, sizeof(color));cntE = 0;top = 0;
}void add(int u, int v, int d){edge[cntE] = Edge(v, d, Head[u]);Head[u] = cntE++;
}bool spfa(int s){for(int i = 0; i <= n; i++) dist[i] = INF;dist[s] = 0;cnt[s] = vis[s] = 1;STACK[top++] = s;while(top){int u = STACK[--top];vis[u] = 0;for(int i = Head[u]; ~i; i = edge[i].next){int v = edge[i].v;if(dist[v] > dist[u] + edge[i].d){dist[v] = dist[u] + edge[i].d;if(!vis[v]){vis[v] = 1;STACK[top++] = v;if(++cnt[v] > n + 1) return false;}}}}return true;
}bool bi(int u){for(int i = 1; i <= n; i++)if(g[u][i]){int v = i;if(color[u] == color[v]) return false;if(!color[v]){color[v] = 3 - color[u];if(!bi(v)) return false;}}return true;
}void solve(){scanf("%d", &n);for(int i = 1; i <= n; i++) scanf("%s", G[i] + 1);for(int i = 1; i <= n; i++)for(int j = 1; j <= n; j++)g[i][j] = G[i][j] - '0';init();for(int i = 1; i <= n; i++)if(!color[i]){color[i] = 1;if(!bi(i)){printf("No\n");return;}}for(int i = 1; i <= n; i++)for(int j = i + 1; j <= n; j++)if(i != j){if(g[i][j]){if(color[i] == 1) add(i, j, -T);else add(j, i, -T);}else{if(color[i] == 1) add(j, i, T - 1);else add(i, j, T - 1);}}for(int i = 1; i <= n; i++){if(color[i] == 1) add(0, i, T - 1), add(i, 0, 0);else add(i, 0, T - 1), add(0, i, 0);}if(spfa(0)) printf("Yes\n");else printf("No\n");
}int main()
{int T;scanf("%d", &T);while(T--) solve();return 0;
}

HDU 4598 Difference 差分约束 + 判奇圈相关推荐

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

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

  2. HDU 4598 Difference

    由|ai| < T for all i and ,(vi, vj) in E <=> |ai - aj| >= T,可知,相邻的边都是一正一负,dfs判断是否成立 差分约束判断 ...

  3. 【POJ - 1364】King(差分约束判无解)

    题干: Once, in one kingdom, there was a queen and that queen was expecting a baby. The queen prayed: ` ...

  4. HDU - 4598 Difference

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

  5. [HNOI2005]狡猾的商人 差分约束+判环

    [HNOI2005]狡猾的商人 u→v=c可以理解为sum[v]−sum[u−1]=c  (前缀和) 定的sum[u→v]=c 不仅需要满足sum[v]−sum[u−1]=c,还应该满足sum[u−1 ...

  6. hdu 4598 差分约束

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

  7. HDU4598 Difference(差分约束)

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

  8. 差分约束 1:pku 1201 Intervals 2:pku 1364 King 3:hdu 1534

    一个很好的差分约束总结:http://972169909-qq-com.iteye.com/blog/1185527 第一:  感觉难点在于建图  第二:  ①:对于差分不等式,a - b <= ...

  9. 【HDU - 3440】House Man(差分约束)

    题干: In Fuzhou, there is a crazy super man. He can't fly, but he could jump from housetop to housetop ...

最新文章

  1. 网红 AI 高仿坎爷发布说唱情歌,歌迷:堪比真人原声
  2. linux 文本 查看 搜索
  3. 为什么说一次一密加是密抗窃听无条件安全的?
  4. 基本的SQL-SELECT语句练习
  5. 力扣两数之和 II - 输入有序数组
  6. 一天一个类,一点也不累之HashSet
  7. SQL*Loader 和 Data Pump
  8. 功能不错的Snagit截图软件
  9. 2013.11.18周例会小结
  10. 使用树莓派3开发板,基于android things 物联网系统来运行TensorFlow解析图像
  11. php技术逻辑思维图,PHP 逻辑思维题
  12. 华为华三常用display命令
  13. (装机)关于WINRE/ESP/LRS_ESP/MSR/PBR这些分区
  14. (Java)抽象类的基本概念
  15. 免费电子书 工具 开发工具包 各类资源 下载 .
  16. Cg插画需要学习什么,难不难?
  17. vim E486不存在::wq 错误笔记
  18. jeecms服务器响应失败,后台提示“服务请求发生了错误”,原因不明
  19. Intel官方对5月15号曝出的CPU侧信道漏洞“ZombieLoad”的详细技术分析(上)
  20. 基于微信小程序的旅游网站

热门文章

  1. Vue脚手架First
  2. 有没有必要经常向领导汇报工作,是怎么汇报工作才好?
  3. 不同应用场景瑞芯微RK3568主板方案定制
  4. 无线图传领域AR1021X系列WiFi模块选型参考及驱动探讨
  5. spring到底是什么!新手必看
  6. 临沂市职业经理人协会举办第五届企业发展论坛
  7. 使用批处理成批添加打印机(含打印服务器)
  8. 无线工勘平台(华为、华三、锐捷)
  9. 关闭apache服务器banner
  10. 怎么把计算机上的资源进行共享,如何实现两台电脑资源共享