hdu 3657 最大點權獨立集)

2021-09-08 09:29:31 字數 1475 閱讀 1920

思路我就不詳細講了,這位大牛講的很清楚:

1 #include2 #include3 #include4

#define maxn 55

5#define maxm 55*55

6#define inf 1<<30

7using

namespace

std;

8struct

edgeedge[maxm*11

];11

12int

map[maxn][maxn];

13int

head[maxm];

14int

pre[maxm];

15int

cur[maxm];

16int

level[maxm];

17int

gap[maxm];

18int

vs,vt,nv,n,m,k,ne;

19bool

mark[maxn][maxn];

20int dir[4][2]=,,,};

2122

23void insert(int u,int v,int cap,int cc=0)30

3132

//引數,源點,匯點

33int sap(int vs,int

vt)61 aug=-1;62

}63goto

loop;64}

65}66int minlevel=nv;

67//

尋找與當前點相連線的點中最小的距離標號(重標號)

68for(int i=head[u];i!=-1;i=edge[i].next)74}

75if((--gap[level[u]])==0)break;//

更新gap陣列後如果出現斷層,則直接退出。

76 level[u]=minlevel+1;//

重標號77 gap[level[u]]++;//

距離標號為level[u]的點的個數+1;

78 u=pre[u];//

轉當前點的前驅節點繼續尋找可行弧79}

80return

maxflow;

81}

8283

84int

main()95}

9697

for(int i=1;i<=k;i++)

101for(int i=1;i<=n;i++)

110}

111 }else

114}

115}

116 printf("

%d\n

",sum-sap(vs,vt));

117}

118return0;

119}

120121

122

hdu 1565 最大點權獨立集

題意 給你乙個m n的格仔的棋盤,每個格仔裡面有乙個非負數。從中取出若干個數,使得任意的兩個數所在的格仔沒有公共邊,就是說所取數所在的2個格仔不能相鄰,並且取出的數的和最大。分析 點我 二分圖最小點覆蓋和最大獨立集都可以轉化為最大匹配求解。在這個基礎上,把每個點賦予乙個非負的權值,這兩個問題就轉化為...

最小點權覆蓋和最大點權獨立集

1 最小點權覆蓋與最大點權獨立集 定義 二分圖又稱作二部圖,是圖論中的一種特殊模型。設 g v,e 是乙個無向圖,如果頂點 v 可分割為兩個互不相交的子集 a,b 並且圖中的每條邊 i,j 所關聯的兩個頂點i和j分別屬於這兩個不同的頂點集 i in a,j in b 則稱圖g為乙個二分圖。給定乙個二...

HDU 1569 方格取數 2 最大點權獨立集

problem description 給你乙個m n的格仔的棋盤,每個格仔裡面有乙個非負數。從中取出若干個數,使得任意的兩個數所在的格仔沒有公共邊,就是說所取數所在的2個格仔不能相鄰,並且取出的數的和最大。input 包括多個測試例項,每個測試例項包括2整數m,n和m n個非負數 m 50,n 5...