h4183最大流
来源:互联网 发布:java光标变粗 编辑:程序博客网 时间:2024/05/16 22:11
这道最大流很巧妙,将每一个点只能过一次写成流通量为1,这样流过一次就不可以再过了,最后判断最大流是否大于2 就行了,蛮简单的
#include <iostream>
#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
struct node
{
double p;
int x,y,r;
}s[400];
int flow[400][400],pre[400],a[400];
int n,sum;
void Bflow(int st,int ed)
{
while(1)
{
memset(pre,-1,sizeof(pre));
memset(a,0,sizeof(a));
a[st]=10005;
queue<int> q;
q.push(st);
while(!q.empty())
{
int index=q.front();
q.pop();
if(index==ed)
break;
for(int i=1;i<=n;i++)
{
if(a[i]==0&&flow[index][i]>0)
{
a[i]=min(a[index],flow[index][i]);
pre[i]=index;
q.push(i);
}
}
}
if(a[ed]==0)
break;
sum=sum+a[ed];
int i=ed;
int index=pre[i];
while(1)
{
flow[index][i]-=a[ed];
flow[i][index]+=a[ed];
if(index==st)
break;
i=index;
index=pre[i];
}
}
}
int main()
{
int k;
scanf("%d",&k);
while(k--)
{
scanf("%d",&n);
sum=0;
memset(flow,0,sizeof(flow));
double minn=800,maxn=200;
int mx,my;
for(int i=1;i<=n;i++)
{
scanf("%lf %d %d %d",&s[i].p,&s[i].x,&s[i].y,&s[i].r);
if(maxn<s[i].p)
{
maxn=s[i].p;
mx=i;
}
if(minn>s[i].p)
{
minn=s[i].p;
my=i;
}
for(int j=1;j<i;j++)
{
if((s[i].x-s[j].x)*(s[i].x-s[j].x)+(s[i].y-s[j].y)*(s[i].y-s[j].y)<=(s[i].r+s[j].r)*(s[i].r+s[j].r))
{
if(s[i].p<s[j].p)
flow[i][j]=1;
else
flow[j][i]=1;
}
}
}
Bflow(my,mx);
if(sum>=2)
printf("Game is VALID\n");
else
printf("Game is NOT VALID\n");
}
return 0;
}
/*
2
4
400.0 0 0 4
789.0 7 0 2
500.35 5 0 2
500.32 5 0 3
*/
- h4183最大流
- 最大流-最大利益
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- 最大流
- jsp c:choose c:if标签
- Caffe学习笔记(七):使用训练好的model做预测(mnist)
- Mike and strings-codeforces-Round 410-Div2-B
- 利用spring-security解决CSRF问题
- linux下QT5.6.2连接MYSQL过程
- h4183最大流
- 【面试题】剑指Offer-49-模拟实现atoi()函数
- PHP,AJAX,ASP,ADO
- 期待
- 编译SSD caffe出错
- jQuery清空table表格除首行外的所有数据(ajax+ js实现动态画表及刷新数据)
- springmvc静态资源访问
- 38-连接断开异常(服务器进程终止)
- Linux内核Makefile分析