這道題的大致題意是:根據最短路求邊的拓撲圖,然後求出每個邊的入度。
我用 dijkstra 求最短路,順便建好圖。之後使用 bfs 來遞推拓撲條件,儲存至 ans 陣列。
注意事項:
使用 long long,你們懂得。
這個做法需要倒序遍歷邊,因為只有倒序遍歷能滿足拓撲序。
本**需要 \(o_2\) 優化 才可通過本題。
code:
#include#include#include#include#includeusing namespace std;
namespace edge[m];
int link[n], cnt;
inline void add(const int& u, const int& v, const int& w)
}a, b; //建兩個圖,乙個(a)是原圖,另乙個(b)是dag
int n, m;
struct ___
};priority_queue<___> heap;
queueq;
int d[n];
bool book[n];
int rrank[n];
long long dp[n], ans[m], dp1[n];
inline void dijkstra(const int& s)
d[s] = 0;
dp1[s] = 1;
heap.push();
while (!heap.empty())
//如果更好,就把邊拆了,重新加上條
if (d[v] > d[now] + val) );}}
nxt = a.edge[nxt].n;}}
}inline void toposort()
}}int u, v, w;
inline int get()
else
return st[a++];
}#ifdef _debug
#define get() getchar()
#endif
inline void read(int& ans) }}
int main()
for (int i = 1; i <= n; i++)
for (int i = 1; i <= m; i++)
printf("%d\n", ans[i]);
return 0;
#undef int
}
2018 10 20測試T1 蛋糕
內網傳送門 外網傳送門 我們先對於 a 排序,然後對於 b,其實就是求上公升序列最少有多少個 還是乙個很常見的模型吧,記錄乙個陣列,每次加入乙個點的時候,就找它前驅的位置,更新一下就可以了 然後求它屬於哪個蛋糕就直接再開乙個陣列記錄一下 應該是一道水題吧。include include includ...
4 21小A模擬賽 T1
description 乙個無限長的01 序列,初始全為0,每次選擇乙個區間 l,r 進行操作,有三種操作 1 l r 將 l,r 中所有元素變成1。2 l r 將 l,r 中所有元素變成0。3 l r 將 l,r 中所有元素異或上1。每次操作後詢問最左邊的0 在哪個位置。input format ...
YCH的模擬賽 T1
括號序列問題,往往就是把左括號看成 1,右括號看成 1,我們只需要保證任意乙個字首大於等於0,且總和為0,就代表是個合法括號序列了。令 f i j 表示當前到第 i 個字元,現在的字首和 j 那麼分三種情況考慮。若第 i 1 個字元是左括號,則能轉移到 f i 1 j 1 若第 i 1 個字元是右括...