CZY選講 棋盤迷宮

2022-03-25 22:20:38 字數 1412 閱讀 5752

題目描述

乙個n*m的棋盤,』.』表示可以通過,』#』表示不能通過,給出q個詢問,給定起點和終點,判斷兩點是否聯通,如聯通輸出「yes」,否則輸出「no」。

資料範圍

n,m <=500,q <=10^6。

題解:

①由於存在兩個方向和不可逆性,標記聯通分量的方法不可行

②分治演算法。按照行將棋盤一分為二,進行dp處理:

用f[i][j]表示點(i,j)與中線上每個點的聯通性,可用bitset壓位處理。

轉移方程式:f[i][j]=f[i][j+1]|f[i+1][j]

③離線詢問,將詢問隨著分治區間而分開處理。

④時間複雜度: o(n2*logn)

#include #include #include using std::vector;

using std::bitset;

const int query_size = 600006;

const int map_size = 511;

int n, m, q;

char map[map_size][map_size];

int ans[query_size];

bitsetf[map_size][map_size], g[map_size][map_size];

struct query ;

query q;

void solve(vectorv, int l, int r)

} for (int i = m; i <= r; i++)

for (int j = 1; j <= m; j++)

} vectorvl, vr;

for (vector::iterator it = v.begin(); it != v.end(); it++)

solve(vl, l, m - 1);

solve(vr, m + 1, r);

}int main()

solve(v, 1, n);

for (int i = 0; i < q; i++)

puts(ans[i] ? "yes" : "no");

return 0;

}//czy020202

那神秘的光芒像暴風雨般凜冽著,大地在無情的追問中幻滅成輓歌,

如夢的迷霧隨著詩篇消逝在遠山…… ————————————汪峰《信仰在空中飄揚》

CZY選講 吃東西

題目描述 乙個神秘的村莊裡有4家美食店。這四家店分別有a,b,c,d種不同的美食。lyk想在每一家店都吃其中一種美食。每種美食需要吃的時間可能是不一樣的。現在給定第1家店a種不同的美食所需要吃的時間a1,a2,aa。給定第2家店b種不同的美食所需要吃的時間b1,b2,bb。以及c和d。lyk擁有n個...

CZY選講 黑白染色

題目描述 給出平面上n 個點,試將他們黑白染色,要求染色後無法用一條直線把黑白完全分開。隨便輸出一種方案。資料範圍 n 100000 題解 點數很多,但是可以發現至多需要4個點就可以完成。根據上述結論進行分類討論即可 找三個點,若三點共線,則按圖1方法染色。若三點不共線,再找第四個點,若與其中兩點共...

CZY選講 最大子矩陣和

題目描述 有乙個n m的矩陣,恰好改變其中乙個數變成給定的常數p,使得改變後的這個矩陣的最大子矩陣最大。資料範圍 n,m 300。題解 如果沒有p,那麼二維矩陣和就是一維最長連續子串行的dp公升級就可以了 設f i j k 表示在i行j行之間1 k列這乙個矩形中的最大子矩陣的值 轉移方程 f i j...