uva11134 相互不攻擊的車

2022-09-15 22:30:21 字數 1208 閱讀 6282

/*uva11134

在n*n(1<=n<=5000)的棋盤上放置n個車,使它們相互不攻擊。

但是車有劃定的區間放置。

求解一種方案,是的每個車能放置,沒有一種滿足,輸出impossible

思路:這種放置車的問題,一般思考到二分圖最大匹配上。

因為要求出到底放置到哪個位置,所以要記錄下來匹配的點。

我們發現行和列是可以分類討論的(因為給定的區間是乙個矩形,這樣,即使選定了某一行放置,所有的列還是可供選擇的)

整理一下流程:例如行:

對車編號1--n,對行編號1--n;

如果乙個車i能放置到第j行,我們在i和j之間連一條i到j的有向邊。

我們現在要找到乙個最大匹配,乙個匹配(即一條邊)的邏輯含義是i車放在j行。

這樣,我們思考匹配尋找的過程。若 1->2,1->3,1->4,2->3,2->4,2->5.

*/

1 #include 2 #include 3 #include 4 #include 

5 #include 6 #include

7 #include 8 #include 9

#define maxn 5010

10using

namespace

std;

1112

intn;

13struct

line

18void

print()

21}x[maxn],y[maxn];

22int

posx[maxn],posy[maxn];

23int

xl[maxn],yl[maxn],xr[maxn],yr[maxn];

24void

read();

28 y[i-1]=(line);29}

30}31bool

solvex()else

return

false;42

}43return

true;44

}45bool

solvey()else

return

false;54

}55return

true;56

}57void

printans()

61return;62

}63intmain()

69return0;

70 }

傳說中的車 UVa11134

題目鏈結 橫座標和縱座標可以分開處理,就是區間上的貪心問題,貪心策略是按右端點從小到大排序,若右端點相同則按左端點從大到小排序,然後在區間上從左向右取點。define crt secure no warnings include include include include include inc...

UVA11134 傳說中的車

橫縱座標互不影響,所以問題轉化到一維 在n個區間中每個區間選乙個數,n個數都被選一次 將區間按右端點排序,列舉區間,每個區間選最靠左的沒被選過的點 include include include includeusing namespace std const int maxn 5010 int n...

UVa11134傳說中的車

今天給大家說一下這道題,題意就不說了,主要說一下思路以及細節部分。首先,從這道題來看就是求出車的座標並且使得車之間不互相攻擊且要滿足車在規定的範圍 矩形 之中,由於紫書說這道題考察了我們問題分解的能力,所以我們從問題分解的角度來解決,對於問題分解,我們可以通過這種方法來簡化問題,從而更好的解決,這道...