hdu 4598 差分约束
思路:首先就是判断是否有奇环,若存在奇环,则输出No。
然后用差分约束找是否符合条件。
对于e(i,j)属于E,并且假设顶点v[i]为正数,那么v[i]-v[j]>=T--->v[j]-v[i]<=-T;
对于e(i,j)不属于E,并且假设顶点v[i]为正数,那么v[i]-v[j]<=T-1;
以0号点为参照点,若果v[i]为负数,那么v[0]-v[i]<=T-1; v[i]-v[0]<=0;
若果v[i]为正数,那么v[i]-v[0]<=T-1; v[0]-v[i]<=0;
有上述条件即可建边求最短路,若果存在负圈,那么就是不存在。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define Maxn 1010
#define Maxm Maxn*Maxn
#define inf 100000000
#define T 400
using namespace std;
int head[Maxn],vi[Maxn],col[Maxn],map[Maxn][Maxn],e,n,cnt[Maxn],dis[Maxn];
void init()
{
memset(head,-,sizeof(head));
memset(vi,,sizeof(vi));
memset(map,,sizeof(map));
memset(col,-,sizeof(col));
e=;
}
struct Edge{
int u,next,v,val;
}edge[Maxm];
void addedge(int u, int v)
{
edge[e].u=u;edge[e].v=v;edge[e].next=head[u];head[u]=e++;
edge[e].v=u;edge[e].u=v;edge[e].next=head[v];head[v]=e++;
}
void add(int u,int v,int val)
{
edge[e].u=u,edge[e].v=v,edge[e].val=val,edge[e].next=head[u],head[u]=e++;
}
void find(int u,int c)
{
int i,j,temp;
vi[u]=;
for(i=head[u];i!=-;i=edge[i].next){
temp=edge[i].v;
if(col[temp]==-){
col[temp]=c;
find(temp,c^);
}
}
}
int spfa()
{
int i,j,v,u;
queue<int> q;
memset(cnt,,sizeof(cnt));
memset(vi,,sizeof(vi));
for(i=;i<=n;i++){
dis[i]=inf;
}
dis[]=;
q.push();
while(!q.empty()){
int u=q.front();
q.pop();
vi[u]=;
for(i=head[u];i!=-;i=edge[i].next){
v=edge[i].v;
if(dis[v]>dis[u]+edge[i].val){
dis[v]=dis[u]+edge[i].val;
cnt[v]++;
if(cnt[v]>n) return ;
if(!vi[v]){
q.push(v);
vi[v]=;
}
}
}
}
return ;
}
int solve()
{
int i,j,u,v;
for(i=;i<=n;i++) if(!vi[i]) find(i,);
for(i=;i<e;i++) if(col[edge[i].u]==col[edge[i].v]) return ;
memset(head,-,sizeof(head));
e=;
for(i=;i<=n;i++){
for(j=i+;j<=n;j++){
if(!map[i][j]&&col[i]==col[j]) continue;
u=i,v=j;
if(col[u]==)
swap(u,v);
if(map[u][v])
add(u,v,-T);
else
add(v,u,T-);
}
if(col[i]==){
add(i,,T-);
add(,i,);
}
else{
add(,i,T-);
add(i,,);
}
}
return spfa();
}
int main()
{
int t,i,j;
char str[];
scanf("%d",&t);
while(t--){
scanf("%d",&n);
init();
for(i=;i<=n;i++){
scanf("%s",&str);
for(j=;j<n;j++){
if(str[j]==''&&!map[i][j+]){
addedge(i,j+);
map[i][j+]=map[j+][i]=;
}
}
}
if(!solve())
printf("No\n");
else
printf("Yes\n");
}
return ;
}
hdu 4598 差分约束的更多相关文章
- hdu 1531(差分约束)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1531 差分约束的题之前也碰到过,刚好最近正在进行图论专题的训练,就拿来做一做. ①:对于差分不等式,a ...
- I - 动物狂想曲 HDU - 6252(差分约束)
I - 动物狂想曲 HDU - 6252 雷格西桑和路易桑是好朋友,在同一家公司工作.他们总是一起乘地铁去上班.他们的路线上有N个地铁站,编号从1到N.1站是他们的家,N站是公司. 有一天,雷格西桑起 ...
- hdu 3666(差分约束,手动栈解决超时问题)
THE MATRIX PROBLEM Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Other ...
- hdu 1364(差分约束)
King Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12056 Accepted: 4397 Description ...
- hdu 1534(差分约束+spfa求最长路)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1534 思路:设s[i]表示工作i的开始时间,v[i]表示需要工作的时间,则完成时间为s[i]+v[i] ...
- hdu 3440 差分约束
看完题目第一遍,感觉很简单.当写完程序跑测试用例的时候,发现第二个总是过不了,然后好好研究了一下测试用例,才知道原来不是程序有问题,而是我的建图方式错了.对于这些无序的点,如果高的在右边,不等式是di ...
- hdu 1534(差分约束)
Schedule Problem Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) ...
- hdu 3440(差分约束好题)
House Man Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- POJ 1364 / HDU 3666 【差分约束-SPFA】
POJ 1364 题解:最短路式子:d[v]<=d[u]+w 式子1:sum[a+b+1]−sum[a]>c — sum[a]<=sum[a+b+1]−c−1 ...
随机推荐
- python __init__.py
python中的Module是比较重要的概念.常见的情况是,事先写好一个.py文 件,在另一个文件中需要import时,将事先写好的.py文件拷贝 到当前目录,或者是在sys.path中增加事先写好的 ...
- MFC非模态对话框中屏蔽ESC键
个人的编程经验认为:对于非模态对话框,按下ESC键和点击红叉都会响应OnCancel()函数,而不会去响应OnClose()函数. 我们都知道,如果想屏蔽Enter键,只须重写OnOK()函数即可(重 ...
- linux-用户建立及权限分配
1.建立用户 useradd –d /usr/test -m test 此命令创建了一个用户test,用户主目录为/usr/test 2.设置用户密码 .修改自己的密码 passwd ,需要输入旧 ...
- 永久改动redhat的default route
1,能够用route命令暂时改动: route add default gw <gateway ip> 2, 通过改动/etc/sysconfig/network 文件永久改动: 脚本: ...
- Codeforces Gym 100803G Flipping Parentheses 线段树+二分
Flipping Parentheses 题目连接: http://codeforces.com/gym/100803/attachments Description A string consist ...
- Linux文件时间属性
Linux文件时间属性 ...
- cocos2d-x 3.1.1 学习笔记[3]Action 动作
这些动画貌似都非常多的样子,就所有都创建一次. 代码例如以下: /* 动画*/ auto sp = Sprite::create("card_bg_big_26.jpg"); Si ...
- zoj-3626 Treasure Hunt I (树形dp)
本文出自 http://blog.csdn.net/shuangde800 题目链接: zoj-3626 题意 给一棵n个节点的树, 节点编号1~n, 每个节点有权值val[i],经过这个节点就可 ...
- iOS开发——UI篇Swift篇&UIImageView
UIImageView override func viewDidLoad() { super.viewDidLoad() titleLabel.text = titleString //通过坐标和大 ...
- centos 7 没有ifconfig 命令
centos 7 没有ifconfig 命令: 安装命令: yum install net-tools