這個題沒有認真讀的話就會寫下以下的dd**
#include#define n 5010using
namespace
std;
intn,m;
intans[n],actr;
inthead[n],ectr;
bool
vis[n];
struct
edgeedge[n
<<1
];void addedge(int
from,int
to)priority_queue
q;bool
operator
<(edge a,edge b)
intmain()
q.push(edge);
while (actr!=n)
for(int i=1;i<=actr;i++)
cout
<"";
return0;
}
用單調佇列維護乙個邊佇列 然後不斷從裡面抓出來沒有被更新的點 看上去好像很對
實際上換個題它就是對的 但是這不是換的那個題
題中說只有兩種走法 一種是從當前走向乙個沒走過的點 另一種是從走過的回退到走過的
那就意味著 如果你回退了一步 你不能再走到乙個你已經走過的點了
這就是為什麼單調佇列不能用的原因(而且什麼玄學下標也救不了)
正解是基環樹上的dfs找環斷邊(logn) 然後樹上跑一遍dfs(n)
總複雜度為o(n*logn)
但實際上你不用找環也行 因為這題n2也能過(哈哈哈哈哈哈哈哈哈哈哈哈)
直接暴力短邊vans
但是該學的演算法還是要學的 要去做那個資料加強版的
這裡埋個坑 以後回來寫掉
tag:sin_xiii ⑨
NOIP2018提高組D2T1 旅行 題解
在這裡。考慮m n 1 m n 1 m n 1的情況,直接按結點編號大小排序,每次選最小的即可。設s on ison i soni 表示i ii的兒子,那麼時間複雜度為 o i 1n soni log 2s oni begino sum n end o i 1 n so ni log2s oni 所...
NOIP2018 Day2 T1 旅行 題解
乍一看,一道基環樹。說實話考場上有點懵,day2t1直接上基環樹?再一看,好像只是一道無腦的搜尋加剪枝 對於noip資料範圍,o n 2 是可以可過去的 但是對於那個加強版資料,可能需要乙個筆者不會的超級玄學。好吧不扯了,咱們來看看資料範圍。m n 1的情況比較簡單只需一遍跑一邊搜尋,每次找字典序最...
NOIP2018D1T2 貨幣系統
題面 這道題我是親自在考場上考過的 先說題解吧 乙個貨幣系統中 x xx是沒用的,當且僅當他能被系統中別的貨幣表示 我們拿rmb rmbrm b來舉個例子 發現所有的錢都能被一分錢表示出來 所以只留乙個一分錢的就好了 啪咳咳 不鬧了 題面可以簡述為 給你乙個貨幣系統a aa 讓我們可以給他簡化 使得...