P2403 SDOI2010 所駝門王的寶藏

2022-05-07 21:15:11 字數 2986 閱讀 7060

在寬廣的非洲荒漠中,生活著一群勤勞勇敢的羊駝家族。被族人恭稱為「先知」的alpaca l. sotomon是這個家族的領袖,外人也稱其為「所駝門王」。所駝門王畢生致力於維護家族的安定與和諧,他曾親自率軍粉碎河蟹帝國主義的野蠻侵略,為族人立下赫赫戰功。所駝門王一生財寶無數,但因其生性節儉低調,他將財寶埋藏在自己設計的地下宮殿裡,這也是今天henry curtis故事的起點。henry是乙個愛財如命的貪婪傢伙,而又非常聰明,他費盡心機謀劃了這次盜竊行動,破解重重機關後來到這座地下宮殿前。

整座宮殿呈矩陣狀,由r×c間矩形宮室組成,其中有n間宮室裡埋藏著寶藏,稱作藏寶宮室。宮殿裡外、相鄰宮室間都由堅硬的實體牆阻隔,由一間宮室到達另一間只能通過所駝門王獨創的移動方式——傳送門。所駝門王為這n間藏寶宮室每間都架設了一扇傳送門,沒有寶藏的宮室不設傳送門,所有的宮室傳送門分為三種:

「橫天門」:由該門可以傳送到同行的任一宮室;

「縱寰門」:由該門可以傳送到同列的任一宮室;

「自由*」:由該門可以傳送到以該門所在宮室為中心周圍8格中任一宮室(如果目標宮室存在的話)。

深謀遠慮的henry當然事先就搞到了所駝門王當年的宮殿招標冊,書冊上詳細記錄了每扇傳送門所屬宮室及型別。而且,雖然宮殿內外相隔,但他自行準備了一種可攜式傳送門,可將自己傳送到殿內任意一間宮室開始尋寶,並在任意一間宮室結束後傳送出宮。整座宮殿只許進出一次,且便攜門無法進行宮室之間的傳送。不過好在宮室內傳送門的使用沒有次數限制,每間宮室也可以多次出入。

現在henry已經開啟了便攜門,即將選擇一間宮室進入。為得到盡多寶藏,他希望安排一條路線,使走過的不同藏寶宮室盡可能多。請你告訴henry這條路線最多行經不同藏寶宮室的數目。

輸入格式:

輸入檔案sotomon.in第一行給出三個正整數n, r, c。

以下n行,每行給出一扇傳送門的資訊,包含三個正整數xi, yi, ti,表示該傳送門設在位於第xi行第yi列的藏寶宮室,型別為ti。ti是乙個1~3間的整數,1表示可以傳送到第xi行任意一列的「橫天門」,2表示可以傳送到任意一行第yi列的「縱寰門」,3表示可以傳送到周圍8格宮室的「自由*」。

保證1≤xi≤r,1≤yi≤c,所有的傳送門位置互不相同。

輸出格式:

輸出檔案sotomon.out只有乙個正整數,表示你確定的路線所經過不同藏寶宮室的最大數目。

輸入樣例#1:

10 7 7

2 2 1

2 4 2

1 7 2

2 7 3

4 2 2

4 4 1

6 7 3

7 7 1

7 5 2

5 2 1

輸出樣例#1:

9
資料規模和約定:

1.首先需要動態開節點,然後通過門的類別建立節點之間的邊。

第一種:歸屬於x座標對應的超級點,y座標對應的點連向x座標對應的點。

第二種:歸屬於y座標對應的超級點,x座標對應的點連向y座標對應的點。

第三種:歸屬於本身(另開乙個超級節點),若其x或y座標上有超級點,則由其向當前點連邊。然後搜尋其周圍八個位置,若有節點,則由該店連線其對應的超級點。

2.對於第三種點的連邊,可以用hash優化,也可以用map。

3.最後就是縮點,跑拓撲圖了。

1 #include2

#define ll long long

3using

namespace

std;

4int n,a,b,col[3000050

],now;

5int dfn[3000050],low[3000050

],cnt,sum;

6int t[3000050],du[3000050

],top;

7int dis[300050

],ans;

8int posx[1000050],posy[1000050

],tot;

9struct

nde10

18}tp1,tp2;

19struct

noe20

32int find(int x,int

y)33

42#undef p

43}hash;

44struct

node

45num[1000050

];48

void tarjan(int

u)49

58else

if(!col[tp1.ver[i]])

59 low[u]=min(low[u],dfn[tp1.ver[i]]);

60if(low[u]==dfn[u])

6168}69

}70void

spfa()

7179

while(!q.empty())

8090}91

}92intmain()

93107

for(int i=1;i<=n;++i)

108if(num[i].flag==1

)109

113else

if(num[i].flag==2

)114

118else

119129

for(int i=1;i<=tot;++i)

130if(!dfn[i])

131tarjan(i);

132for(int i=1;i<=tot;++i)

133for(int j=tp1.head[i];j;j=tp1.nex[j])

134if(col[i]!=col[tp1.ver[j]])

135139 spfa();printf("%d"

,ans);

140return0;

141 }

**

SDOI2010 所駝門王的寶藏

在寬廣的非洲荒漠中,生活著一群勤勞勇敢的羊駝家族。被族人恭稱為 先知 的alpaca l.sotomon是這個家族的領袖,外人也稱其為 所駝門王 所駝門王畢生致力於維護家族的安定與和諧,他曾親自率軍粉碎河蟹帝國主義的野蠻侵略,為族人立下赫赫戰功。所駝門王一生財寶無數,但因其生性節儉低調,他將財寶埋藏...

SDOI2010 所駝門王的寶藏

題面 題解我寫的是讓同一行 同一列的點形成乙個環,表示它們互相可達。aysn 寫的是對於同一行列建乙個新點表示互相可達。看了窩還是太弱了,還須多練。include include include include include include include include define ri re...

BZOJ 1924 Sdoi2010 所駝門的寶藏

time limit 5 sec memory limit 128 mb submit 1380 solved 603 submit status discuss 第一行給出三個正整數 n,r,c。以下 n 行,每行給出一扇傳送門的資訊,包含三個正整數xi,yi,ti,表示該傳送門設在位於第 xi行...