原创 BZOJ1433 假期的宿舍(最大流)

是一張二分圖,也可以用匈牙利算法實現。 X部爲人,Y部爲牀,S向要留校的和校外人員連容量爲1的邊,所有的牀向T連邊,只有校內人員有牀。 #include<cstdio> #include<cstring> #include<vector>

原创 HDU3416 Marriage Match IV(最大流+最短路)

城市A和B之間有一些有向邊,求A,B之間的走最短路有多少種方法,即點可以重複走,而邊不能。 首先求最短路,然後把在最短路上的邊拖到新圖裏,容量爲1,求最大流。判斷一條邊是否在最短路上:d1[edge[i].v]+d2[edge[

原创 HDU3605 Escape(最大流)

有n個人要移居m個星球,給出每個合適的星球,每個星球最多能容納的人數,問是否所有人都可以移居。(1≤N≤105,1≤M≤10) 一開始還以爲是最大流的裸題,結果TLE,翻了翻題解才知道原因:N的範圍太大,那麼多條邊連完就TLE了

原创 HDU3472 HS BDC(最大流+歐拉回路)

神奇的網絡流建模。 有n(n≤1000) 個單詞,每個單詞的長度都小於20,有的單詞可以翻轉。如果一個單詞的尾字母和另外一個單詞的首字母相同,那麼兩個單詞可以拼接在一起。求問n個單詞是否完全能夠拼接在一起。 把每個單詞抽象成兩

原创 HDU3081 Marriage Match II(最大流)

n個女孩和n個男孩要玩過家家的遊戲。每個女孩要選擇一個與她沒有吵過架的男孩假裝男朋友,如果這個女孩的朋友與某個男孩沒有吵過架,那麼這個女孩也可以找那個男孩假裝男朋友。每次必須找不同的人,問這個遊戲最多能進行多少輪。 把女孩放在一

原创 HDU3998 Sequence(DP+最大流)

已知一個長度爲n的排列,先求出它的最長上升子序列的長度,設爲k,再求長度爲k的上升子序列有多少個。每個點只能經過一次。 自認爲這道題比較像最短路計數。類似的,先求出最長上升子序列(O(n^2)都可以),然後把每個點拆點,容量爲1,因爲只能

原创 BZOJ1218 激光炸彈

二維區間求和亂搞 #include<cstdio> using namespace std; inline int Max(int a,int b) {return a>b?a:b;} inline int Min(int a,int b

原创 BZOJ3996 線性代數(最小割)

目標: ans=min∑i=1NA1,i(∑j=1NA1,j∗Bj,i−C1,i) 化簡得到 ans=min∑i=1N∑j=1NA1,i∗A1,j∗Bi,j−∑i=1NA1,i∗C1,i 而Ai=0,1 ,因此轉化爲這個模

原创 HDU2821 Pusher(DFS)

題目理解了半天- - 在r*c的網格上面放置有一些箱子,你可以選擇任意一塊個空地作爲你的起點。有上下左右四種移動的操作。一旦選擇了一個方向,你會不停地朝這個方向走下去直到的撞到了箱子。被你撞到的箱子會向你行走的方向移動一格,而且

原创 HDU5634 Rikka with Phi(線段樹)

三個操作:1.把數列的A[i](i∈[l,r]) 變爲φ(A[i]) 2.把數列的A[i](i∈[l,r]) 變爲x 3.求∑ri=lA[i](i∈[l,r]) 正解是平衡樹,線段樹也可以。首先把歐拉函數的表打出來。 #in

原创 HDU1226 超級密碼(BFS)

由於n最大也只有5000,則對於枚舉的密碼s,s%n的狀態也只有5000種。所以每一個枚舉到的狀態,開兩個內容,一個表示密碼的字符串,一個表示模n的餘數,當餘數爲0的時候,說明找到密碼。 #include<cstdio> #inc

原创 BZOJ3931 網絡吞吐量(最大流)

題目比較簡單,但是到處是坑,建圖也有點蛋疼。先求最短路,然後拆點跑最大流。 首先是圖中是雙向邊不是單向邊,而且給出的是點權,還需要判斷在最短路徑上的邊的兩個端點的先後關係,這無疑給建圖帶來了許多麻煩。最重要的是開long lon

原创 Codeforces 321E Ciel and Gondolas(DP)

n(n≤4000) 個人排隊要乘k(k≤min(n,800)) 艘船,每艘船坐的人數不限。第i個人對第j個人有一個不滿意度Ui,j(0≤Ui,j≤9且Ui,j=Uj,i=0) ,如果他們在一條船中的話。問,如何安排使得總不滿度最小

原创 HDU2883 kebab(最大流)

n位顧客要找老闆烤肉串,第i個人要烤Ni 串,每串烤Ti 分鐘,可以分成幾個部分來烤,但是必須在Si 之後才能開始烤,而且必須在Ei 之前烤完(個人認爲題目描述不清,應該是時間區間 (Si,Ei] )。烤爐每分鐘可以同時烤m單位

原创 HDU1885 Key Task(BFS)

有一個迷宮還有四種鑰匙,對應四種門,問走出迷宮的最少步數。 二進制狀態壓縮step[s][x][y]表示走到點x,y,獲得鑰匙的狀態爲s的最少步數。 類似於這道題:http://acm.hdu.edu.cn/showprobl