题意:给你一个无向图 这个图是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. 蓝牙扫描工具btscanner修复暴力扫描模式
  2. 建博客的原因。。。。
  3. python语言的理解-Python动态语言理解
  4. L - 病毒扩散(暴力)
  5. kubernetes (1)基本概念
  6. 【技术综述】你真的了解图像分类吗?
  7. 【最优解法】1030 完美数列 (25分)_23行代码AC
  8. 百度推出新技术 MIP,网页加载更快,广告呢?
  9. volatile关键字的使用
  10. 容器化Go应用--基础镜像的未知时区问题
  11. 成都五月花计算机网教,【强调】成都五月花计算机学校网址是什么
  12. 研究生阅读管理文献---我阅读科研文献的一些做法
  13. [HDU 1003] Max Sum
  14. 企业API接口设计之token、timestamp、sign具体实现
  15. 实用网站、软件、App分享
  16. route命令(详细)
  17. 关于SQLServer连接Oracle数据库时报'链接服务器ORCL的 OLE DB 访问接口 OraOLEDB.Oracle 返回了消息 新事务不能登记到指定的事务处理器中。 。'
  18. 易到CEO巩振兵被曝本周已离职 其称“在开会”
  19. Linux 打印机移植说明
  20. Mac 序列号不可用导致超时代视频加密视频播放失败

热门文章

  1. G-WAN http server
  2. R绘图 | 圆角堆叠柱状图(ggchicklet )
  3. java占用CPU过高
  4. translate-101-phonics-rules
  5. ProxmoxVE添加新硬盘
  6. NMS(non maximum suppression )
  7. python机器学习决策树算法
  8. 因路径乱码使InstallShield Wizard安装包打开“出现1155错误,文件xxx.msi未找到“的解决方式
  9. RPC——RPC协议介绍及原理详解
  10. 商品收藏模块的功能设计实现