0x26 廣搜變形

2022-04-30 01:06:17 字數 3010 閱讀 8805

電路維修 這道題雖然乍一看就會想斜對角的兩點之間邊權受初始電路的影響要麼為0要麼為1,但是有乙個思考點就是可以通過奇偶性,證明相鄰的兩個點是不可能在同乙個電路中。練習一下雙端佇列。

#include#include

#include

#include

#include

#include

using

namespace

std;

const

int dx[4]=;

const

int dy[4]=;

char ss[510][510

];int xx[3100000],yy[3100000],cc[510][510

];int

main()

for(int k=0;k<=3;k++)

else}}

}if(bk==false)printf("

no solution\n");

}return0;

}

電路維修

poj3635 有點尷尬啊我寫的堆優化bfs卡不過去。。。去a*那再做吧

upd:這算哪門子a*啊,真是被discuss的水逼坑死。。。我寫了個用路徑中最小**的加油站*油數做預估函式的a*跑的比堆+bfs還慢,結果就是正解就是判斷是否之前已經走過更短的(對沒錯就像最短路那樣),剪枝一下就過了???(思維僵化啊菜雞yzh)

#include#include

#include

#include

#include

#include

#include

using

namespace

std;

int n,m,c[1100

];struct

edge

a[21000];int len,last[1100

];void ins(int x,int y,int

d)int

c,st,ed;

struct

astar

};priority_queue

,greater>q;

int g[1100][110

];void

bfs()

if(tno.l+1

<=c&&g[tno.x][tno.l+1]>g[tno.x][tno.l]+c[tno.x])

for(int k=last[tno.x];k;k=a[k].next)}}

printf(

"impossible\n");

}int

main()

intq;

scanf("%d

",&q);

while(q--)

return0;

}

poj3635

hdoj

3085 這題真是折騰死了。。。題意有點不清(去找discuss)做法是兩個輪流走並且列舉時間層數判斷,因為有可能某人(幾乎是明明)對於當前時間能夠到達的點比另乙個多得多。噁心的是這個明明同學一秒三步非常難判,一開始我是寫了個三步的方向,結果發現這樣會穿牆,然後改成三個走一步套在一起,結果發現拓展的時候,當前秒走了1步和2/3步的拓展是有差異的,但是秒數一樣就體現不出來,最後解決的方法就是以1/3秒為單位走,圓滿解決

#include#include

#include

#include

#include

#include

using

namespace

std;

const

int dx[16]=;

const

int dy[16]=;

intn,m,gx1,gy1,gx2,gy2;

char ss[810][810

];struct

node

list[

2][1100000

];int d[2][810][810

];bool check(int x,int y,int asd)

int getdis(int x,int y)

intmain()

}int head[2],tail[2],dep=0; bool bk=false

; head[

0]=1, tail[0]=2, list[0][1].x=bx, list[0][1].y=by;

head[

1]=1, tail[1]=2, list[1][1].x=gx, list[1][1].y=gy;

memset(d,-1,sizeof(d)); d[0][bx][by]=0, d[1][gx][gy]=0

;

if(getdis(bx,by)<=2||getdis(gx,gy)<=2)

while(head[0]0]&&head[1]1

])

if(getdis(x,y)>2*(d[0][x][y]/3+1

)) }}

head[

0]++;

}if(bk==true)break

;

while(d[1][list[1][head[1]].x][list[1][head[1]].y]==dep)

if(getdis(x,y)>2*(d[1][x][y]/3+1

)) }}

head[

1]++;

}if(bk==true)break

;

dep++;

}/*for(int i=1;i<=n;i++)

printf("\n");

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

*/if(bk==false)printf("

-1\n");

}return0;

}

hdoj3085

寬搜還是比深搜玩的好一些,但是比較複雜的題細節處理的不好

HDU 1181 變形課 廣搜

problem description 呃.變形課上harry碰到了一點小麻煩,因為他並不像hermione那樣能夠記住所有的咒語而隨意的將乙個棒球變成刺蝟什麼的,但是他發現了變形咒語的乙個統一規律 如果咒語是以a開頭b結尾的乙個單詞,那麼它的作用就恰好是使a物體變成b物體.harry已經將他所會的...

電路維修 (廣搜變形 雙端佇列)

題目 這道題做法挺多的,洛谷上有好多,但是都需要將該迷宮轉換為一張圖,即對於一條邊,其對角線的點相互到達需要幾次旋轉,若該邊為 則左上角到右下角可以不用旋轉邊直接到達,而左下角到右上角則需要一次旋轉,故可將該兩點間邊權置為1,將圖建立起來。接下來可以有兩種做法,堆優化最短路跑,廣搜。這裡說一下廣搜 ...

變形課杭電1181 深搜,廣搜,並查集

problem description 呃 變形課上harry碰到了一點小麻煩,因為他並不像hermione那樣能夠記住所有的咒語而隨意的將乙個棒球變成刺蝟什麼的,但是他發現了變形咒語的乙個統一規律 如果咒語是以a開頭b結尾的乙個單詞,那麼它的作用就恰好是使a物體變成b物體.harry已經將他所會的...