码迷,mamicode.com
首页 > 其他好文 > 详细

POJ2594 Treasure Exploration

时间:2020-04-05 20:38:14      阅读:58      评论:0      收藏:0      [点我收藏+]

标签:char   etc   amp   dfs   names   tin   using   com   algorithm   

Description

link-POJ2594

我的题面和 \(POJ\) 上的不太一样

有一些伞兵和一个 \(DAG\),可以给伞兵任意指定下降的节点,让它遍历整个图

每个伞兵的路径可以重复

\(n \le 100\) (随便做)

Solution

首先一个前置题目:UVA1184 Air Raid

这个题是个裸的有向无环图的最小路径覆盖问题

首先要发现这个题的两个相交的路径:\(x \rightarrow y \rightarrow z\) 和路径 \(u \rightarrow y \rightarrow v\)

这里如果我们添加一条边\((x,z)\)

那么问题又转化成了最小点覆盖(\(x\rightarrow z\)\(u \rightarrow y \rightarrow v\)

这里搞一个 \(Floyd\) 传递闭包搞连通性然后最大匹配就好了

Code

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
#define int long long
namespace yspm{
	inline int read()
	{
		int res=0,f=1; char k;
		while(!isdigit(k=getchar())) if(k==‘-‘) f=-1;
		while(isdigit(k)) res=res*10+k-‘0‘,k=getchar();
		return res*f;
	}
	const int N=1010;
	struct node{
		int nxt,to;
	}e[N<<9];
	int head[N],cnt;
	inline void add(int u,int v)
	{
		e[++cnt].nxt=head[u]; e[cnt].to=v;
		return head[u]=cnt,void();
	}
	int to[N],vis[N],n,m;
	inline bool dfs(int x)
	{
		for(int i=head[x];i;i=e[i].nxt)
		{
			int t=e[i].to; if(vis[t]) continue;
			vis[t]=1; if(!to[t]||dfs(to[t])) return to[t]=x,1;
		}
		return 0;
	}
	inline int max_match()
	{
		int ans=0;
		for(int i=1;i<=n;++i)
		{
			memset(vis,0,sizeof(vis));
			ans+=dfs(i);
		}
		return ans;
	}
	int f[N][N];
	inline void prework()
	{
		memset(f,0,sizeof(f)); memset(head,0,sizeof(head));
		memset(to,0,sizeof(to)); memset(e,0,sizeof(e));
		cnt=0;
		return ;
	}
	inline void work()
	{
		m=read();
		for(int i=1;i<=m;++i)
		{
			int u=read(),v=read();
			f[u][v]=1;
		}
		for(int k=1;k<=n;++k)
		{
			for(int i=1;i<=n;++i)
			{
				for(int j=1;j<=n;++j)
				{
					f[i][j]|=f[i][k]&&f[k][j];
				}
			}
		}
		for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) if(f[i][j]) add(i,j);
		cout<<n-max_match()<<endl;
		return prework();
	}
	signed main()
	{
		while(n=read()) work();
		return 0;
	}
}
signed main(){return yspm::main();}

POJ2594 Treasure Exploration

标签:char   etc   amp   dfs   names   tin   using   com   algorithm   

原文地址:https://www.cnblogs.com/yspm/p/12638764.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!