HDU 3461 並查集的應用

2021-10-25 16:14:30 字數 1118 閱讀 4205

這道題最難想到就是區間內同時向上旋轉的影響

舉例子說明:

現有字串:aa 可修改區間為[1,2]

因為區間內部是同步變化的,aa(間隔為0) 無論怎麼變化都無法變化為ab(間隔為1)

所以實際的選擇方案的數量是和各個元素之間初始的間隔有關

長度為二的區間有26中不同的間隔方式所以總的方式數目為:26

當是較長的字串和較長的區間時:

如:abcdef 可修改區間為[1,3]

拿出[1,3]的區間 為 bcd

區間內的總的間隔的方案數目為 26 * 26

所以總的方案數為:26 * 26 * 26 * 26

可見只要存在乙個之前區間無法覆蓋的區間,則26的次方數要減一

區間覆蓋其實就比較好理解了 [2,3] 和 [4,5] 這兩個區間各自作用一次的效果等同於 [2.5] 這乙個區間作用一次,所以可以得出的是,相鄰且不相交的區間會自己合併

**如下:

#include

#include

#define ll long long

using

namespace std;

const

int n =

5e7+

10,mod =

1000000007

;int p[n]

,ans;

int find (

int x)

void

merge

(int a,

int b)

ll qpow

(ll a,ll b)

return res;

}int

main

(void

)

cout <<

qpow(26

,ans)

<< endl;

}return0;

}

hdu 1198 並查集應用

其實可能是因為知道是用並查集做的原因啦,一下就看出題意了,明顯是並查集思想,每次輸入地圖中的一塊,檢測這一塊與它頂頭的那塊可不可以相通 如果可以合併集合 同理檢測其與它左邊的那一塊 最後遍歷一遍看有多少個根結點即要多少個水源 下面是 有點亂 include include define m 55 d...

hdu 1198 並查集應用

1 如何把a k塊表示出來,從而使之容易判斷兩塊地是否可以歸併到一起 例如 把a塊劃分如上圖所示,有4個方向,與其他塊有通路的方向標記為1,反之為0,所以a 其他同理 2 如何在map中識別是那一塊,然後根據這一塊找到它的四個方向的0 1情況呢?這裡把a k等效成了0 11 通過座標找到map所在位...

HDU3938 並查集 並查集

先按邊權值排個序,每次加入一條邊,用並查集,關鍵看懂題。include include include include using namespace std const int maxn 10010 int n,m,q struct edge edges maxn 5 inline int cmp...