嘟嘟嘟
一道很水的黑題~~
邊雙縮點後用lca求樹上兩點間路徑即可。
但是比較坑的是這道題是忽略重邊的,結果我還特意考慮了重邊,然後wa了幾發。
還有兩個點tle了,原因是建新圖的時候出現了重邊。這個重邊不是演算法的問題,因為邊雙縮點後不可能有重邊,而是寫法上的問題:在建無向邊的時候,習慣addedge(x, y), addedge(y, x),然而邊雙建邊的時候兩個點之間實際上連了4條邊。所以寫的時候只用建單向邊,形成的圖卻是無向圖。
1 #include2 #include3 #include4 #include5 #include6 #include7 #include8 #include9 #include10 #include11view codeusing
namespace
std;
12#define enter puts("")
13#define space putchar(' ')
14#define mem(a, x) memset(a, x, sizeof(a))
15#define rg register
16 typedef long
long
ll;17 typedef double
db;18
const db eps = 1e-8;19
const
int inf = 0x3f3f3f3f;20
const
int maxn = 1e4 + 5;21
const
int maxe = 5e4 + 5;22
inline ll read()
2331 inline void
write(ll x)
3237
38int
n, m;
3940
struct
edge
41e[maxe << 1], e2[maxe << 1
];44
int head[maxn], ecnt = -1;45
void addedge(int x, int
y)46
;48 head[x] =ecnt;49}
5051
int dfn[maxn], low[maxn], cnt = 0;52
bool
in[maxn];
53int st[maxn], top = 0;54
int col[maxn], ccol = 0;55
void tarjan(int now, int
f)56
66else
if(e[i].to != f) low[now] =min(low[now], dfn[e[i].to]);67}
68if(dfn[now] ==low[now])
69while(x !=now);77}
78}7980
int head2[maxn], ecnt2 = -1;81
void addedge2(int x, int
y)82
;84 head2[x] =ecnt2;85}
86void newgraph(int
now)
8795}96
97const
int n = 20;98
int fa[maxn][25
], dep[maxn];
99void dfs(int now, int
f)100
110}
111int lca(int x, int
y)112
121122
void print(int
x)123
128void solve(int x, int
y)129
134135
intmain()
136144
for(int i = 1; i <= n; ++i) if(!dfn[i]) tarjan(i, 0
);145 mem(head2, -1
);146
for(int i = 1; i <= n; ++i) newgraph(i);
147 dfs(col[1], 0
);148
int q =read();
149for(int i = 1; i <= q; ++i)
150154
return0;
155 }
有機化學筆記
電子層和電子亞層的概念 如1s 2p 軌道,前面的數字代表電子層數。s亞層是角量子數l為1的軌道,能容納一對自旋相反的電子 p亞層是角量子數為2的軌道,能容納三對自旋相反的電子 d亞層是角量子數為3的軌道,能容納五對自旋相反的電子 共價鍵 性質 鍵長,越短,鍵越穩定。共價鍵的極性是因為成鍵的兩個原子...
洛谷2783 有機化學之神偶爾會做作弊
題目戳這裡 一句話題意 乙個無向圖,先縮掉所有的環,再詢問兩點直接隔了多少個點 兩端也算 solution 似乎難度稱不上黑題,思路也很明顯 直接tarjan縮點後求lca,深度之差就是相隔的點數。但注意特判lca x或y的情況。本來早就可以a了,結果居然lca打錯,無語.可能難就難在 比較長,有點...
洛谷P2783 有機化學之神偶爾會做作弊
雖然感覺難度其實並不到黑題的難度 其實這道題並沒用什麼特別的知識,只是tarjan求雙聯通分量和lca的結合。所以,我們可以很顯然的發現 如此惡劣的詞彙,逃 這道題其實就是給你乙個無向圖,其中乙個點雙聯通分量算作乙個點,詢問兩個點之間 包括這兩個點 有多少點 注意重邊不需要縮點 注意這裡的圖是無向圖...