檔案路徑 BOI2015

2022-05-27 11:15:09 字數 1958 閱讀 6768

對於每個葉子節點問:是否能構造出一條從根節點出發以該節點為終點的長為 \(k\) 的路徑

設有乙個葉子節點 \(x\)

情況1根到 \(x\) 的路徑長等於 \(k\)

那顯然答案就是yes

情況2走了一次附加的有向邊使得路徑長為 \(k\)

考慮這條有向邊的終點在**:由於走過這條有向邊之後還要從它的終點走到 \(x\),所以有向邊的終點一定要是 \(x\) 的乙個祖先

記點 \(p\) 的深度是 \(d_p\),那麼假設走了一條 \(p\rightarrow q\) 的有向邊,總長度就是 \(d_p+s+(d_x-d_q)\)

其中,\(p\) 是樹上的任意乙個非葉子節點,\(q\) 必須是 \(x\) 的祖先

要判斷是否有 \(p,q\) 滿足 \(d_p+s+(d_x-d_q)=k\),可以考慮列舉 \(q\),這樣就確定了 \(d_x-d_q\),預處理出 \(d_p+s\) 可以取哪些值(存在乙個bool陣列裡),如果存在某個 \(p\) 使得 \(d_p+s=k-(d_x-d_q)\) 那麼 \(x\) 的答案就是yes

乙個例子

情況3如果一條有向邊可以走很多次,那麼必須滿足它的終點是起點的祖先

又因為終點要是 \(x\) 的祖先,所以現在需要找到這樣一條路徑 \(p\rightarrow q\):

滿足 \(d_x+t*(d_p-d_q+s)=k\) (\(t\) 為乙個正整數)

其中 \(q\) 是 \(x\) 的祖先,\(p\) 是 \(q\) 子樹中乙個非葉子節點

在dfs時,每到乙個非葉子節點就再把以它為根的子樹遍歷一遍,把所有合法的 \(d_p-d_q+s\) 存在bool陣列裡,並在回溯時清除貢獻

列舉 \(k-d_x\) 的所有約數,判斷是否有滿足條件的 \(d_p-d_q+s\) 即可

時間複雜度 \(o((n+m)^2+m\sqrt)\)

#include #define n 20005

using namespace std;

typedef long long ll;

template inline void read(t &num)

int n, ccf, k, s, a[n], d[n];

int head[n], pre[n<<1], to[n<<1], sz;

int ok[1000005], ok2[1000005], ans[n];

inline void addedge(int u, int v)

void dfs1(int x, int fa)

} void dfs3(int x, int fa, int rt, int v)

}int stk[n], top;

void solve(int x)

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

if (d[x] < k)

} }}void dfs2(int x, int fa)

stk[++top] = x;

dfs3(x, fa, x, 1);

for (int i = head[x]; i; i = pre[i])

dfs3(x, fa, x, -1);

top--;

}int main()

dfs1(0, 0);

dfs2(0, 0);

for (int i = ccf + 1; i <= n; i++) puts(ans[i]?"yes":"no");

return 0;

}

BOI 2002 雙調路徑

城市的道路是雙向的,每條道路有固定的旅行時間以及需要支付的費用。路徑由連續的道路組成。總時間是各條道路旅行時間的和,總費用是各條道路所支付費用的總和。同樣的出發地和目的地,如果路徑a比路徑b所需時間少且費用低,那麼我們說路徑a比路徑b好。對於某條路徑,如果沒有其他路徑比它好,那麼該路徑被稱為最優雙調...

獲得檔案路徑

1 獲得絕對路徑 eg.c yuanzhenhai littlesea.txt 2 當前相對路徑 eg.littlesea.txt 3 獲得目錄上一層的相對路徑 假如已經知道當前路徑是.littlesea.txt 得到它的上一層路徑yuanzhenhai中的xiaohai.txt路徑的方法是 eg....

HTML檔案路徑

如何表示下級目錄 引用下級目錄的檔案,直接寫下級目錄檔案的 路徑即可。假設info.html 路徑是 c inetpu b wwwroot sites blabla info.html 假設index.html 路徑是 c inetpub wwwroot sites blabla html inde...