UVALive 4080 Warfare And Logistics (最短路树)
2024-08-23 21:50:14
很多的边会被删掉,需要排除一些干扰进行优化。
和UVA - 1279 Asteroid Rangers类似,本题最关键的地方在于,对于一个单源的最短路径来说,如果最短路树上的边没有改变的话,那么最短路肯定是不会变的,
所以只要枚举删掉最短路树上的边。这样的时间复杂度就能过了。
#include<bits/stdc++.h>
using namespace std; const int maxn = , maxm = ;
int head[maxn], to[maxm], nxt[maxm],wei[maxm],ecnt;
int delta[maxm]; void addEdge(int u,int v,int w)
{
to[ecnt] = v;
nxt[ecnt] = head[u];
wei[ecnt] = w;
head[u] = ecnt++;
} typedef pair<int,int> Node;
#define fi first
#define se second int d[maxn],pa[maxn];
typedef long long ll; void dijkstra(int n,int s,int L,bool flag,int e1,int e2)// e1 e2 边应该忽略
{
priority_queue<Node,vector<Node>,greater<Node> > q;
fill(d,d+n,L);
d[s] = ; q.push(Node(,s)); pa[s] = -;
while(q.size()){
Node x = q.top(); q.pop();
int u = x.se;
if(x.fi != d[u]) continue;
for(int i = head[u]; ~i; i = nxt[i])if(i!=e1 && i!=e2) {
int v = to[i];
if(d[v] > d[u]+wei[i]){
d[v] = d[u]+wei[i];
if(flag) pa[v] = i; // 入边编号
q.push(Node(d[v],v));
}
}
}
} ll cal(int n)
{
ll ret = ;
for(int i = ; i < n; i++){
ret += d[i];
}
return ret;
} void init()
{
memset(head,-,sizeof(head));
ecnt = ;
memset(delta,,sizeof(delta));
} int main()
{
//freopen("in.txt","r",stdin);
int n,m,L;
while(~scanf("%d%d%d",&n,&m,&L)){
init();
while(m--){
int u,v,w; scanf("%d%d%d",&u,&v,&w);
addEdge(--u,--v,w); addEdge(v,u,w);
}
ll ans1 = ;
vector<int> edges;
for(int u = ; u < n; u++){
dijkstra(n,u,L,true,-,-);
ll t = cal(n);
ans1 += t;
for(int i = ; i < n; i++){
if(~pa[i]){
dijkstra(n,u,L,false,pa[i],pa[i]^);
int eid = pa[i]&(~);
if(!delta[eid]) edges.push_back(eid);
delta[eid] += cal(n)-t;
}
}
}
int MaxDelta = ;
for(int i = ; i < (int)edges.size(); i++){
MaxDelta = max(MaxDelta,delta[edges[i]]);
}
printf("%lld %lld\n",ans1,ans1+MaxDelta);
}
return ;
}
最新文章
- oauth协议
- git 临时记录
- MySQL学习笔记--基本操作
- 修改开机启动等待时间(for Ubuntu12.10)
- linux安装 Android Studio详细教程,支持性较差,需要安装最新底层库内核的linux
- 实现一次请求加载多个js或者css
- GRUB三步通(转)
- Mac终端命令收集
- css 10 款非常棒的CSS代码格式化工具推荐
- 关于Oracle、SqlServer 的sql递归查询
- Windows 快捷键总结
- tensorFlow入门实践(三)实现lenet5(代码结构优化)
- BZOJ.4825.[AHOI/HNOI2017]单旋(线段树)
- pngcrush caught libpng error原因及解决方法
- (笔记)ubuntu下安装jdk
- Vivado抓取信号
- OpenStack入门之【OpenStack-havana】之单网卡-All In One 安装(基于CentOS6.4)
- GTK安装
- 通向码农的道路(enet开源翻译计划 二)
- collections.Counter类统计列表元素出现次数