文章目录
题目链接:
http://codeforces.com/contest/1076/problem/D
题意:N个点,M条边,选择K条边留下来,使得留下来的这些节点到1号点的最短路不变,并且要使留下来的点最多
因为要连成一颗树,所以最多就是K+1个节点,跑个Dij,然后顺着选K个点就行了
这道题最大的收获是:堆优化的Dij也会被卡,要标记看是不是在队列里面,以前不是一直说不用标记啥的嘛,也没出现过问题,结果今天。。。幸好彭老板先补这道题,然后找出问题所在T_T
看别人的代码直接用set了,不在队列里就直接erase了
#include"bits/stdc++.h"
using namespace std;
typedef long long LL;
const int maxn=1e6+5;
const int MOD=1e9+7;
LL inf=1e15;
int N,M,K;
int Pre[maxn];
struct Edge
{
LL t,v,nxt,id;
Edge() {
}
Edge(LL t,LL v):t(t),v(v) {
}
Edge(LL t,LL v,LL id):t(t),v(v),id(id) {
}
bool operator<(const Edge tp)const
{
return v