題意:看了許多遍才看懂意思,(理解力賊差)。就是說,給你n只襪子,從1-n編號,給出每只襪子的顏色,接下來m行,每行給出乙個l和r,代表這天要穿的襪子編號。求為了保證每天穿的兩隻襪子顏色相同,至少對幾隻襪子染色。
思路:首先我們可以對這m對關係用並查集進行維護,把需要顏色相同的襪子放到乙個集合裡面去,然後使用vector存入該集合中每只襪子的顏色。然後我們要染最少的襪子,所以就應該把他們染成和(相同顏色最多的襪子的顏色)一樣,就是減去該集合中顏色的眾數。然後使用map維護一下顏色個數就好啦。
上**:
#include
#include
#include
#include
using
namespace
std;
#define maxn 200005
int col[maxn],pre[maxn]; //col 存顏色 pre並查集
vector
g[200005]; //這個vector存放每個集合中的襪子的顏色
int find(int x)
void join(int x,int y)
int main()
for(i=1;i<=m;++i)
for(i=1;i<=n;++i)
int ans=0;
for(i=1;i<=n;++i)
POJ1456(貪心 思維並查集)
poj1456 貪心並查集 題意 給定n個商品,每個商品有利潤pi和過期時間di,每天只能買乙個商品,過期不能再賣,求如何安排每天賣出的商品,可以使得收益最大。資料範圍 1思路 1 首先不難想到貪心先賣出價值最大的商品,先用按照價值從大到小sort排序。2 我們貪心選擇在其過期的前一天 day 1 ...
導遊 (並查集 貪心)
幫助mr.he找出所有遊客帶到目的地,且往返次數最少的路線,如果不能把遊客送到目的地,輸出 no 輸入格式 第一行兩個整數n和r,分別表示城市數量和道路數量,各城市編號為1.n。接下來的r行,每行3個整數 a b p,表示道路ab的最大載客量為p。最後有若干行,每包含3個整數 s d t,分別表示出...
2054 貪心 並查集
貪心的總體思路是 每次找到乙個權值最大的節點,如果它是根節點,則首先對它染色,否則的話我們可以得出乙個結論,在對它的父親已經染色的情況下,立刻給它染色是最優的。現在重點討論第二種情況,當它不是根節點時,我們如果對它父親染了色,則一定會立刻對它染色,所以可以把它和它父親合併為同乙個節點,它和它父親的兒...