考試的時候打的可持久化並查集,沒調出來qaq
後面知道了kruskal重構樹這個東西,感覺好簡單啊
這道題就建出kruskal重構樹後,對於兩個點找到它們的lca,其子樹min就是答案
#include#define ui unsigned int
#define ll long long
#define db double
#define ld long double
#define ull unsigned long long
const int maxn=200000+10,maxm=400000+10,inf=0x3f3f3f3f;
int t,n,m,e,beg[maxn],nex[maxm<<1],to[maxm<<1],w[maxm<<1],wt[maxn<<1],mn[maxn<<1],cnt,d[maxn],fa[maxn<<1],jie[20][maxn<<1];
ll lastans;
struct node
};node side[maxm];
struct cmp
};std::priority_queue,cmp> q;
templateinline void read(t &x)
templateinline void write(t x,char ch='\0')
templateinline void chkmin(t &x,t y)
templateinline t min(t x,t y)
inline void insert(int x,int y,int z)
inline void dijkstra()
}inline int found(int x)
inline void init()
} for(register int j=1;j<=19;++j)
for(register int i=1;i<=cnt;++i)jie[j][i]=jie[j-1][jie[j-1][i]];
}inline int get(int x,int a)
int main()
; insert(u,v,l);insert(v,u,l);
} init();
ll q,k,s;
read(q);read(k);read(s);
while(q--)
}return 0;
}
刷題 BZOJ 4946 Noi2017 蔬菜
網上大部分都是並查集寫法,但是有大神寫了非並查集寫法,特別容易理解 首先 s i 的限制,只需將每乙個蔬菜分出乙個價值為 a i s i 且過期時間為該蔬菜最晚的一天的蔬菜 把時間倒序之後,問題轉化為每個蔬菜會在第幾天出現,每天貪心選擇價值最大的即可 先求出 max 的答案,然後遞推 1,max 1...
LeetCode刷題系列20
給定乙個只包括 的字串,判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。注意空字串可被認為是有效字串。示例 1 輸入 輸出 true 示例 2 輸入 輸出 true 示例 3 輸入 輸出 false 示例 4 輸入 輸出 false 示例 5 輸入 輸...
刷題 力扣 20
題目鏈結 題目描述 給定乙個只包括 的字串 s 判斷字串是否有效。有效字串需滿足 左括號必須用相同型別的右括號閉合。左括號必須以正確的順序閉合。示例 1 輸入 s 輸出 true示例 2 輸入 s 輸出 true示例 3 輸入 s 輸出 false示例 4 輸入 s 輸出 false示例 5 輸入 ...