POJ 1422 Air Raid

想了好几次,一直想不出来,没思路!

今天看了解题报告,才知道是一个:最小路径覆盖数问题

最小路径覆盖数=N-最大匹配数

这个真还不知道!但是不知道为什???

草了,这博客园这东西真傻比!!字体都调不过来!

View Code
#include <stdio.h>
#include <string.h>

#define M 7200
#define N 122

int nodev[N];
int nodeu[M],next[M];

void Build_Graph(int m)
{
int i,v,u,ind;

memset(nodev,-1,sizeof(nodev)); ind=0;

for(i=0;i<m;i++)
{
scanf("%d %d",&v,&u);

nodeu[ind]=u;
next[ind]=nodev[v];
nodev[v]=ind;
ind++;
}
}

int pre[N];
bool no[N];
bool find(int v)
{
int i,u;
for(i=nodev[v];i!=-1;i=next[i])
{
u=nodeu[i];
if(!no[u])
{
if(pre[u]==-1 || (no[u]=true,find(pre[u])))
{
pre[u]=v;
return true;
}
}
}
return false;
}
int solve(int n)
{
int v,cnt=0;

memset(pre,-1,sizeof(pre));
for(v=1;v<=n;v++)
{
memset(no,false,sizeof(no));
if(find(v)) cnt++;
}
return n-cnt;
}

int main()
{
int t,n,m;
scanf("%d",&t);
while(t--)
{
scanf("%d %d",&n,&m);

Build_Graph(m);
printf("%d\n",solve(n));
}
return 0;
}

知道这个公式了,是简单啊!

那要是不知道呢?还简单不?

你可能感兴趣的:(raid)