洛谷題面:
由每個豆子引一條射線,與射線交點個數為奇數相當於多邊形圍住了它,這樣可以定義乙個狀態f[x][y][s]表示從起點出發,走到(x,y)處時的路徑與d顆豆子引出的射線相交的奇偶性狀態為s,最少需多少步。然後跑最短路轉移即可。
然而,有乙個小問題就是轉移時如何判與豆子引出的射線相交。如果單純按與線相交的拐點來計算的話,我們發現會有這兩種截然不同的情況被算成了一樣。
理論上藍色路徑應該是0,綠色路徑應該是1才對。
於是我們可以選擇統計時把邊定一下向,像綠色路徑這種穿出的情況就不重複計算了。詳見**。
#includeusing namespace std;
const int n = 15;
#define min(a,b) ((a)
#define rep(i,a,b) for(register int i=(a);i<=(b);++i)
int n,m,w[n],val[1<<10],d;
char mp[n][n];
int dis[n][n][1<<10],ans;
struct labean[n];
queueq;
bool vis[n][n][1<<10];
int rx[4]=;
int ry[4]=;
inline bool isin(int x,int y)
inline void spfa(int x,int y));dis[x][y][0]=0;vis[x][y][0]=1;
while(!q.empty()));}}
}}int main()
rep(j,0,(1}}
rep(i,1,n)
}printf("%d\n",ans);
return 0;
}
SCOI2009 最長距離 最短路
注意,0 號格仔是可以走的,1 是用來隔斷的。然後,要確定最長距離,我們可以考慮成乙個點到另乙個點的最少需要搬掉幾個障礙物才可以,那麼問題可以轉變成最短路問題,然後在乙個個的去查詢即可。時間複雜度 include include include include include include inc...
SCOI2009 迷路 題解
恢復內容開始 題目描述 windy 在有向圖中迷路了。該有向圖有 nnn 個節點,windy 從節點 000 出發,他必須恰好在 ttt 時刻到達節點 n 1n 1n 1。現在給出該有向圖,你能告訴 windy 總共有多少種不同的路徑嗎?注意 windy 不能在某個節點逗留,且通過某有向邊的時間嚴格...
SCOI2009 最長距離
windy有一塊矩形土地,被分為 nm 塊 11 的小格仔。有的格仔含有障礙物。如果從格仔a可以走到格仔b,那麼兩個格仔的距離就為兩個格仔中心的歐幾里德距離。如果從格仔a不可以走到格仔b,就沒有距離。如果格仔x和格仔y有公共邊,並且x和y均不含有障礙物,就可以從x走到y。如果windy可以移走t塊障...