POJ3041 最小頂點覆蓋

2021-06-22 06:41:58 字數 926 閱讀 6806

題意:

給你乙個n * n 的矩陣,和x所在的座標,問你最少放多少個**可以把圖里的所有x都覆蓋,每個**可以覆蓋一行,或者一列。

思路:最小頂點覆蓋,最小頂點覆蓋=二分匹配,每一行最多放乙個,每一列最多放乙個,對於每乙個點,他只要被一行或者一列照應就行了。

所以直接把x所在的點的行和列連線在一起,(二分後對於當前點相當於只選擇乙個),這樣最後每個點都會被照應到,同時盡可能地去匹配了,也就是盡可能地減少了浪費。

#include

#include

#define n_node 550

#define n_edge 255000

typedef

struct

star;

star e[n_edge];

int list[n_node]

,tot;

int mk_dfs[n_node]

,mk_gx[n_node];

void

add(

int a ,

int b)

intdfs_xyl

(int x)

}return0;

}int

main

()int sum =0;

memset

(mk_gx ,

255,

sizeof

(mk_gx));

for(i =

1;i <= n ;i ++)

printf

("%d\n"

,sum);

}return0;

}

POJ3041 最小頂點覆蓋

題意 給你乙個n n 的矩陣,和x所在的座標,問你最少放多少個 可以把圖里的所有x都覆蓋,每個 可以覆蓋一行,或者一列。思路 最小頂點覆蓋,最小頂點覆蓋 二分匹配,每一行最多放乙個,每一列最多放乙個,對於每乙個點,他只要被一行或者一列照應就行了。所以直接把x所在的點的行和列連線在一起,二分後對於當前...

POJ3041最小點覆蓋

頂點覆蓋 g中的任意邊都至少有乙個端點屬於s的頂點幾何 s 屬於 v 最小頂點覆蓋,就是盡可能少的選出一些點構成集合s,使得圖g中任意邊,都至少又乙個端點屬於s 每一列當成乙個點,每一行當成乙個點,若行節點和列節點之間有邊,則表明該行列該列有乙個障礙物。主要是構圖 將每一行當成乙個點,構成集合1,每...

poj3041 最小點覆蓋

題目問的是使用 一次可以摧毀一行或一列的隕石,最少使用多少次?這個是求最小點覆蓋的問題,也就是問最少多少點可以覆蓋所有的邊。然後最小點覆蓋又可以等於二分圖的最大匹配,所以就建圖求最大匹配 這題 建圖的用的隕石的x座標和y座標,把隕石的x座標集合和y座標集合作為2個點集,然後把每乙個隕石對應的x,y連...