pku 2594 Floyd+最小路径覆盖
2009-06-07 21:59
281 查看
pku 2594 大意是说给定一个有向无环图,用最少的路径去覆盖整个图,路径间允许顶点相交
这个题一看就觉得是最小路径覆盖,可是允许顶点相交想了一会儿。说白了就一句话
既然允许顶点相交,那就要把连通性也传递下去,这样就可以变换到标准的最小路径覆盖问题
贴个代码,只此一次 主要是我的代码很很很丑
1 ///loves DL~~
2
3 #include <iostream>
4 #include <algorithm>
5
6 using namespace std;
7
8 const int MAXN=510;
9 bool gg[MAXN][MAXN];
int link[MAXN];
bool s[MAXN];
int m,n;
bool find(int x)
{
int i;
for(i=1;i<=n;i++){
if((!s[i])&&gg[x][i]){
s[i]=true;
if(link[i]==0||find(link[i])){
link[i]=x;
return true;
}
}
}
return false;
}
int main()
{
freopen("in.txt","r",stdin);
while(scanf("%d%d",&n,&m)!=EOF&&!(m==0&&n==0))
{
memset(gg,0,sizeof(gg));
memset(link,0,sizeof(link));
int i,j,k;
int st,e;
for(i=0;i<m;i++)
{
scanf("%d%d",&st,&e);
gg[st][e]=true;
}
////Floyd 求传递闭包
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(gg[i][k]&&gg[k][j]&&!gg[i][j])
gg[i][j]=true;
}
}
}
////寻找最小路径覆盖
int ans=0;
for(i=1;i<=n;i++)
{
memset(s,false,sizeof(s));
if(find(i))
{
ans++;
}
}
printf("%d\n",n-ans);
}
return 0;
这个题一看就觉得是最小路径覆盖,可是允许顶点相交想了一会儿。说白了就一句话
既然允许顶点相交,那就要把连通性也传递下去,这样就可以变换到标准的最小路径覆盖问题
贴个代码,只此一次 主要是我的代码很很很丑
1 ///loves DL~~
2
3 #include <iostream>
4 #include <algorithm>
5
6 using namespace std;
7
8 const int MAXN=510;
9 bool gg[MAXN][MAXN];
int link[MAXN];
bool s[MAXN];
int m,n;
bool find(int x)
{
int i;
for(i=1;i<=n;i++){
if((!s[i])&&gg[x][i]){
s[i]=true;
if(link[i]==0||find(link[i])){
link[i]=x;
return true;
}
}
}
return false;
}
int main()
{
freopen("in.txt","r",stdin);
while(scanf("%d%d",&n,&m)!=EOF&&!(m==0&&n==0))
{
memset(gg,0,sizeof(gg));
memset(link,0,sizeof(link));
int i,j,k;
int st,e;
for(i=0;i<m;i++)
{
scanf("%d%d",&st,&e);
gg[st][e]=true;
}
////Floyd 求传递闭包
for(k=1;k<=n;k++)
{
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
{
if(gg[i][k]&&gg[k][j]&&!gg[i][j])
gg[i][j]=true;
}
}
}
////寻找最小路径覆盖
int ans=0;
for(i=1;i<=n;i++)
{
memset(s,false,sizeof(s));
if(find(i))
{
ans++;
}
}
printf("%d\n",n-ans);
}
return 0;
相关文章推荐
- pku2594 最小路径覆盖
- poj/pku 2594 (最小路径覆盖)
- POJ-2594 Treasure Exploration,floyd+最小路径覆盖!
- poj 2594 floyd+最小路径覆盖
- 最小边覆盖(最小路径覆盖)(路径不可相交)——pku2060
- [最小路径覆盖、二分图最大匹配]Pku3020--Antenna Placement
- POJ 2594 Treasure Exploration (floyd判断联通+最小路径覆盖)
- poj 2594 Treasure Exploration(最小路径覆盖(可重点)+floyd)
- POJ 题目2594 Treasure Exploration(最小路径覆盖)
- POJ 2594 Treasure Exploration(最小路径覆盖-hungary+Floyd)
- POJ 2594 Treasure Exploration (可相交最小路径覆盖)
- PKU 3216(最小路径覆盖 + floyd)
- POJ 2594 传递闭包的最小路径覆盖
- POJ Treasure Exploration 2594【Warshall求传递闭包+最小路径覆盖】
- HDU 2594 Treasure Exploration(有向图最小可重叠路径覆盖)
- poj 2594 Treasure Exploration(最小路径覆盖/二分最大匹配)
- POJ 2594 Treasure Exploration(最小路径覆盖+Floyd求传递闭包)
- K - Treasure Exploration - POJ 2594(最小路径覆盖+闭包传递)
- POJ-2594-Treasure Exploration-(路径相交的最小路径覆盖+闭包传递)
- POJ 2594 Treasure Exploration(带交叉路的最小路径覆盖)