摘要:
恶心死我了,调试了3个小时,居然是图连错了,一直在搞第5个点的TLE,原因大概是跑最长路的时候建了st点,然后那个点貌似是个大环,然后就无限第跑个不停......一晚上啊!!!不过差分约束还是比较好理解的,把不等关系变成三角不等式的形式,可以跑最长路也可以跑最短路,只不过连边不太一样罢了,跑之前自己想好就行了。不想在说什么了,恶心!View Code 1 #include<iostream> 2 #include<cstdio> 3 #include<algorithm> 4 #include<cstring> 5 #include<cma 阅读全文
摘要:
首先能发现一个规律,就是重构最小生成树的时候,一定不可能用一条权值较大的边和一条权值较小的边去替换他们中间的两条边。简而言之,就是只能权值相同的边相互替换。再进一步说,就是每种权值的边的数目是一定的。 题目上说值相同的边最多10条,那么我们可以DFS选哪些,然后用并查集来判断是否成环。这里要注意,我们先kruskal把每种边选几条求出来,再按kruskal的顺序dfs每一种,每dfs一种,我们就要把这些边连起来(也就是边dfs边kruskal),这样可以确保求出每种边的组合是合法的。最后把它们乘起来就行了。 看一些题解上说如果相同的边多了要用矩阵,表示不太懂......minmst... 阅读全文
摘要:
其实这个题就是用LCT动态地维护一棵最小生成树..如果正着做的话,会发现删边以后扫边表找边会很疼,于是我们反着想。因为没要求在线,那么我们从后往前看,如果删掉那些询问里的边以后,我们求出了一棵MST,那么其他的边就永无翻身之日了。然后就无视它们好了。用lct维护边的话依然很恶心,那么我们把边变成点(参考某神题解),这样添加和删除就直接在这个代表边的点上做就行了吧。那么我们只需要记录一下每个询问的两个点之间的边是哪个点就行了。一开始做MST的时候,用不着findroot用并查集就行了。注意修改的时候要判断加的这条边和这两点间的最大边的大小。可是,超时了......pascal选手的无奈。花了1个 阅读全文