SSL1333 地鼠的困境【二分图匹配】【匈牙利算法】

   日期:2020-08-23     浏览:101    评论:0    
核心提示:这道题其实也差不多是一个模板题注意有多组数据即可。代码#include#include#include#include#includeusing namespace std;int T,n,m,v,s,tot,ans,link[1010],vis[1010],ls[1010];double dzx[1010],dzy[1010],sdx.


这道题其实也差不多是一个模板题
注意有多组数据即可。

代码

#include<algorithm>
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;

int T,n,m,v,s,tot,ans,link[1010],vis[1010],ls[1010];
double dzx[1010],dzy[1010],sdx,sdy;

struct node
{
	int y,next;
}map[1000010];
void add(int x,int y)
{
	map[++tot].y=y;
	map[tot].next=ls[x];
	ls[x]=tot;
}
int dfs(int x)
{
	for(int i=ls[x]; i; i=map[i].next)
	 {
	 	int y=map[i].y;
	 	if(!vis[y])
	 	 {
	 	 	vis[y]=1;
	 	 	int fa=link[y];
	 	 	link[y]=x;
	 	 	if(fa==0||dfs(fa))
	 	 	  return 1;
	 	 	link[y]=fa;
	 	 }
	 }
	return 0;
}
int main()
{
    cin>>T;
    while(T--)
     {
     	scanf("%d%d%d%d",&n,&m,&s,&v);
     	for(int i=1; i<=n; i++)
     	   scanf("%lf%lf",&dzx[i],&dzy[i]);
     	for(int i=1; i<=m; i++)
     	 {
     	   scanf("%lf%lf",&sdx,&sdy);
     	   for(int j=1; j<=n; j++)
     	    {
     	       double dis=sqrt((sdx-dzx[j])*(sdx-dzx[j])+(sdy-dzy[j])*(sdy-dzy[j]));
     	       if(dis<=s*1.0*v*1.0)  //能到达才建边
     	         add(j,i);
     	    }
     	 }
     	for(int i=1; i<=n; i++)
     	 {
     	 	memset(vis,0,sizeof(vis));
     	 	if(dfs(i))
     	 	  ans++;
     	 }
     	cout<<n-ans<<endl;   //受到攻击的,不是不受到攻击的 
     	memset(link,0,sizeof(link));  //数组,变量清零
     	memset(ls,0,sizeof(ls));
     	tot=0,ans=0;
     }
    return 0;
}
 
打赏
 本文转载自:网络 
所有权利归属于原作者,如文章来源标示错误或侵犯了您的权利请联系微信13520258486
更多>最近资讯中心
更多>最新资讯中心
0相关评论

推荐图文
推荐资讯中心
点击排行
最新信息
新手指南
采购商服务
供应商服务
交易安全
关注我们
手机网站:
新浪微博:
微信关注:

13520258486

周一至周五 9:00-18:00
(其他时间联系在线客服)

24小时在线客服