最短路徑常用演算法有dijkstra和spfa。spfa支援負數權重,但容易被毒瘤資料卡。
想讓spfa跑快點可以加入乙個小優化:用deque代替queue,然後在push的時候分類,如果比當前front的dis要小就push front,否則push back。
最短路計數和次短路問題仿照普通dp處理即可。次短路中嚴格非嚴格注意區別對待。
建模方面主要考慮分層圖等常見技巧。處理實際問題時可能結合二分答案或者列舉進行。
#include using namespace std;
const int max_node = 100005;
const int max_edge = 1000005;
template class graph_sp
void reset_graph(int n)
void reset_solver(int n)
void solvespfa(int v0, int n) }}
}};graph_spg;
int n, m, k;
struct edge
} e[max_edge];
int check(int lim)
g.solvespfa(1, n);
return g.d[n];
}int main()
sort(e + 1, e + m + 1);
int l = 0, r = 1e+9;
while (r > l)
cout << (l >= 1e+9 ? -1 : l) << endl;
}
#include using namespace std;
const int max_node = 100005;
const int max_edge = 200005;
template class graph_sp
void reset_graph(int n)
void reset_solver(int n)
void solvespfa(int v0, int n) }}
}};graph_spg1, g2;
int n, m, x, u, v, w;
int main()
g1.solvespfa(x, n);
g2.solvespfa(x, n);
int ans = 0;
for (int i = 1; i <= n; i++)
cout << ans << endl;
}
#include using namespace std;
const int max_node = 5005;
const int max_edge = 200005;
template class graph_sp
void reset_graph(int n)
void reset_solver(int n)
void solvespfa(int v0, int n)
if (s[x] > d[p] + y && d[p] + y != d[x])
if (s[x] > s[p] + y && s[p] + y != d[x]) }}
}};graph_spg;
int n, m, u, v, w;
int main()
g.solvespfa(1, n);
cout << g.s[n] << endl;
}
#include using namespace std;
const int max_node = 100005;
const int max_edge = 1000005;
template class graph_sp
void reset_graph(int n)
void reset_solver(int n)
void solvespfa(int v0, int n) }}
}};graph_spg[6];
int n, m, p[6], u, v, w;
int perm[6] = ;
int main()
for (int i = 0; i < 6; i++)
int ans = 1e+9;
while (next_permutation(perm + 1, perm + 6))
cout << ans << endl;
}
#include using namespace std;
const int max_node = 100005;
const int max_edge = 1000005;
template class graph_sp
void reset_graph(int n)
void reset_solver(int n)
void solvespfa(int v0, int n) }}
}}
};int n, m, p, s, u, v, w;
graph_spg;
int main()
for (int i = 1; i <= p; i++)
g.solvespfa(s, n);
for (int i = 1; i <= n; i++)
}
一本通學習筆記 樹鏈剖分
loj上只掛了兩個無重的題,本來心想水一下,結果被sdoi2011染色那題卡了一發。儘管這題之前做過,但實現很不優美。今天wa的第一發一開始測樣例就掛了,強行除錯半天交上去一分沒有。後來仔細想了想怎樣寫比較清楚 儘管看起來好像有點冗餘 寫好以後一路順風一發就過。從這裡也有點感悟吧。include d...
學習筆記最短路徑
n個城市,標號從0到n 1,m條道路,第k條道路 k從0開始 的長度為2 k,求編號為0的城市到其他城市的最短距離 第一行兩個正整數n 2 n 100 m m 500 表示有n個城市,m條道路 接下來m行兩個整數,表示相連的兩個城市的編號n 1行,表示0號城市到其他城市的最短路,如果無法到達,輸出 ...
《資訊學奧賽一本通》學習筆記 1
程式開頭使用 include include using namespace std int main char c b putchar c putchar x42 轉義字元 putchar 0x42 putchar 66 1.cout 表示式 2.cout 表示式1 表示式2 cin 變數 cin...