FZU 2235 國王的出遊 離散化 Bfs

2021-08-01 23:31:07 字數 1723 閱讀 4092

problem 2235 國王的出遊

黑暗之王有一片棋盤般的疆土,這片疆土有2*10^9行,有2*10^9列。假設這塊疆土的行從上到下編號1到2*10^9,它的列從左到右也編號1到2*10^9。我們可以把第i行第j列的方格記為座標(i,j)。

但是這偌大棋盤只有被給的n個線狀區域才是允許通行的。每個線狀區域被三個引數描述,ri,ai,bi(ai<= bi)。ri代表給定線狀區域的行編號,ai代表線狀區域的起始列編號,bi代表末尾編號。

現在國王想要從乙個給定座標方格(x0,y0)通過最小移動步數到達終點座標方格(x1,y1),而且只能通過上述給出的允許通行的線狀區域。

國王移動一步只能發生在相鄰的方格之間。此外,如果兩個方格至少共享乙個點我們便認為他們相鄰。

有多組資料(<=30),處理到檔案尾(eof)。

每組資料第一行包含四個整數,x0, y0, x1, y1(1 <= x0, y0, x1, y1 <= 2*10^9),分別代表國王的初始座標和終點座標。

第二行有乙個整數n (1 <= n <= 10^5),代表有n條可通行的線狀區域。

接下裡會有n行,第i行包含三個整數,ri,ai, bi (1 <= ri, ai bi <= 2*10^9),含義看題面。

資料允許線狀區域會有交叉或者巢狀。

資料保證國王的起點方格和終點方格都是可通行的,並且兩個區域不相同。另外保證所有線狀區域的的長度總和不超過10^5。

1 <= x0, y0, x1, y1, ri, ai, bi<= 2*10^9,1 <= n <= 10^5

如果沒有一條道路使得國王從起始區域到達終點區域,則輸出 -1。

否則,則輸出國王的從起始區域到達終點區域的最小步數。

5 7 6 11 3

5 3 8

6 7 11

5 2 5

1 1 2 10 2

1 1 3

2 6 10 4

-1福州大學第十三屆程式設計競賽

就是考驗**能力的一道題。

然而直接map+排序,分成行和列去離散化的話,fzu沒有開o2加速,map會一直tle...............................

所以我們不妨換個思路。

我們用pair存入所有點,因為點的個數不超過1e5.所以我們對線段所覆蓋的點去重並存入即可。

然後我們直接將每個點拿出,看看其周圍8個位子是否能走,如果有能走的地方,直接建一條邊就行。

然後跑一下bfs就行了。

ac**:

/*

*/#include#include#include#includeusing namespace std;

struct node

e[105000*8];

int cont;

int head[105000];

int dist[105000];

int fx[8]=;

int fy[8]=;

pairp[105000];

int cnt;

int sx,sy,ex,ey;

void add(int from,int to)

void spfa()}}

if(dist[tt]==0x3f3f3f3f)printf("-1\n");

else printf("%d\n",dist[tt]);

}int main()}}

spfa();}}

cogs2235 烤雞翅 貪心

題意 每天雞翅數量都會增加,每天也會有人買一定數量雞翅,求最多賣給幾個人。奧妙重重 對每天的雞翅數量分類討論,如果夠賣就賣上,不夠賣就分析前些日子賣得最多的乙個如果不賣是否夠,夠就退了那個,再賣這個。為什麼呢?證明如下 如果夠賣,可以發現剩下的數量更多,答案至少不會更壞 如果不夠賣,就需要退掉至少兩...

FZU 單詞問題

給出乙個完整的句子,這個句子中不包含不可見字元或者空格,於是在這個句子中有許多不同的單詞。乙個單詞是指一串連續的最長的英文本母 大寫或小寫 例如 abc 中,abc 就是乙個單詞,而 ab bc 都不算單詞。輸入包含多組資料 輸入資料第一行是乙個句子,只包含可見字元 不包含空格 句子長度不超過 10...

fzu 單詞問題

description 給出乙個完整的句子,這個句子中不包含不可見字元或者空格,於是在這個句子中有許多不同的單詞。乙個單詞是指一串連續的最長的英文本母 大寫或小寫 例如 abc 中,abc 就是乙個單詞,而 ab bc 都不算單詞。input 輸入包含多組資料 輸入資料第一行是乙個句子,只包含可見字...