P3905 道路重建
P3905 道路重建
我一开始想错了,我的是类似kruskal,把毁坏的边从小到大加,并且判断联通性。但是这有一个问题,你可能会多加,就是这条边没用,但是它比较小,你也加上了。
居然还有10分,数据也是水水的。。。
#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<cstring>
#define inf 2147483647
#define For(i,a,b) for(register int i=a;i<=b;i++)
#define p(a) putchar(a)
#define g() getchar()
//by war
//2017.10.10
using namespace std;
int n,m,dd,A,B,x,y,v,t;
int a[][];
bool b[][];
int d[];
int ans; struct node
{
int l,r,v;
bool operator<(const node&aa)const
{
return v<aa.v;
}
}e[]; void in(int &x)
{
char c=g();x=;
while(c<''||c>'')c=g();
while(c<=''&&c>='')x=x*+c-'',c=g();
}
void o(int x)
{
if(x>)o(x/);
p(x%+'');
} int find(int x)
{
if(d[x]==x)return x;
d[x]=find(d[x]);
return d[x];
} int main()
{
in(n),in(m);
For(i,,n)
d[i]=i;
For(i,,m)
{
in(x),in(y),in(v);
a[x][y]=v;
a[y][x]=v;
}
in(dd);
For(i,,dd)
{
in(x),in(y);
b[x][y]=true;
b[y][x]=true;
}
in(A),in(B);
For(i,,n)
For(j,,n)
{
if(!b[i][j]&&a[i][j]>)
d[find(i)]=find(j);
if(b[i][j])
{
e[++t].l=i;
e[t].r=j;
e[t].v=a[i][j];
}
}
sort(e+,e+t+);
For(i,,t)
{
if(find(A)!=find(B))
{
if(find(e[i].l)!=find(e[i].r))
{
d[find(e[i].l)]=find(e[i].r);
ans+=e[i].v;
}
}
else
{
o(ans);
break;
}
}
return ;
}
正解是把未坏的边的权值设成0,坏的边的值不变,跑spfa即可。
#include<iostream>
#include<cstdio>
#include<queue>
#include<algorithm>
#include<cmath>
#include<ctime>
#include<cstring>
#define inf 2147483647
#define len 10010
#define For(i,a,b) for(register int i=a;i<=b;i++)
#define p(a) putchar(a)
#define g() getchar() using namespace std;
int n,m,x,y,v,dd,A,B;
queue<int>q;
int d[];
bool vis[],b[][]; struct node
{
int n,v;
node *next;
}*e[len]; void push(int x,int y,int v)
{
node *p;
p=new node();
p->n=y;
p->v=v;
if(e[x]==NULL)
e[x]=p;
else
{
p->next=e[x]->next;
e[x]->next=p;
}
} void in(int &x)
{
int y=;
char c=g();x=;
while(c<''||c>'')
{
if(c=='-')
y=-;
c=g();
}
while(c<=''&&c>='')x=x*+c-'',c=g();
x*=y;
} void o(int x)
{
if(x<)
{
p('-');
x=-x;
}
if(x>)o(x/);
p(x%+'');
} void spfa(int x)
{
For(i,,n)
d[i]=inf;
d[x]=;
q.push(x);
node *p;
int t;
while(q.size()>)
{
t=q.front();
p=e[t];
vis[t]=true;
while(p!=NULL)
{
if(!b[t][p->n])
{
if(d[t]<d[p->n])
{
d[p->n]=d[t];
if(!vis[p->n])
q.push(p->n);
}
}
else
{
if(d[t]+p->v<d[p->n])
{
d[p->n]=d[t]+p->v;
if(!vis[p->n])
q.push(p->n);
}
}
p=p->next;
}
vis[t]=false;
q.pop();
}
} int main()
{
in(n),in(m);
For(i,,m)
{
in(x),in(y),in(v);
push(x,y,v);
push(y,x,v);
}
in(dd);
For(i,,dd)
{
in(x),in(y);
b[x][y]=true;
b[y][x]=true;
}
in(A),in(B);
spfa(A);
o(d[B]),p(' ');
return ;
}
P3905 道路重建的更多相关文章
- 洛谷——P3905 道路重建
P3905 道路重建 题目描述 从前,在一个王国中,在n个城市间有m条道路连接,而且任意两个城市之间至多有一条道路直接相连.在经过一次严重的战争之后,有d条道路被破坏了.国王想要修复国家的道路系统,现 ...
- 洛谷 P3905 道路重建 题解
P3905 道路重建 题目描述 从前,在一个王国中,在\(n\)个城市间有\(m\)条道路连接,而且任意两个城市之间至多有一条道路直接相连.在经过一次严重的战争之后,有\(d\)条道路被破坏了.国王想 ...
- P1359 租用游艇 && P3905 道路重建 ------Floyd算法
P1359 租用游艇 原题链接https://www.luogu.org/problemnew/show/P1359 P3905 道路重建 原题链接https://www.luogu.org/ ...
- 洛谷 P3905 道路重建
题目描述 从前,在一个王国中,在n个城市间有m条道路连接,而且任意两个城市之间至多有一条道路直接相连.在经过一次严重的战争之后,有d条道路被破坏了.国王想要修复国家的道路系统,现在有两个重要城市A和B ...
- 洛谷P3905 道路重建
题目:https://www.luogu.org/problemnew/show/P3905 分析: 此题是显然的最短路算法,只是看到一起删掉的一堆边感到十分棘手,而且还要求出的是最短添加边的总长度 ...
- 【最短路】道路重建 @upcexam5797
时间限制: 1 Sec 内存限制: 128 MB 题目描述 小L的家乡最近遭遇了一场洪水,城市变得面目全非,道路也都被冲毁了.生活还要继续,于是市政府决定重建城市中的道路. 在洪水到来前,城市中共有n ...
- [JZOJ 5465] [NOIP2017提高A组冲刺11.9] 道路重建 解题报告 (e-dcc+树的直径)
题目链接: http://172.16.0.132/senior/#main/show/5465 题目: 小X所居住的X国共有n个城市,有m条无向道路将其连接.作为一个统一的国家,X 城的任意两个城市 ...
- 【洛谷P1272】道路重建
题目大意:给定一个 N 个节点的树,求至少剪掉多少条边才能使得从树中分离出一个大小为 M 的子树. 题解:考虑树形 dp,定义 \(dp[u][i][t]\) 为以 u 为根节点与前 i 个子节点构成 ...
- [JZOJ5465]道路重建--边双缩点+树的直径
题目链接 lueluelue 分析 这鬼题卡了我10发提交,之前做过一道类似的题目:https://rye-catcher.github.io/2018/07/09/luogu%E9%A2%98%E8 ...
随机推荐
- 洛谷 P1412 经营与开发 解题报告
P1412 经营与开发 题目描述 \(4X\)概念体系,是指在\(PC\)战略游戏中一种相当普及和成熟的系统概念,得名自4个同样以"\(EX\)"为开头的英语单词. \(eXplo ...
- 【hdu3709】 Balanced Number
http://acm.hdu.edu.cn/showproblem.php?pid=3709 (题目链接) 题意 求范围${[a,b]}$之间的平衡数的个数,所谓平衡数就是以某一位为支点,两侧的力矩相 ...
- 【POJ2728】Desert King 最优比率生成树
题目大意:给定一个 N 个点的无向完全图,边有两个不同性质的边权,求该无向图的一棵最优比例生成树,使得性质为 A 的边权和比性质为 B 的边权和最小. 题解:要求的答案可以看成是 0-1 分数规划问题 ...
- Eclipse Neon 汉化
官网下载的Eclipse是英文版的,对于初学者来说为了减小学习的难度,将英文版汉化是有必要的. 第一步:依次点击Eclipse菜单栏上的“Help"-->”About",查看 ...
- Linux命令(八)Linux系统信息相关命令
top:
- Android改进版CoverFlow效果控件
最近研究了一下如何在Android上实现CoverFlow效果的控件,其实早在2010年,就有Neil Davies开发并开源出了这个控件,Neil大神的这篇博客地址http://www.inter- ...
- Ubuntu 14.04 + gnome session back (metacity) 任务栏右上角图标消失问题解决
没错, 就是说右上角的所有图标 (时间啊, 系统啊所有的)都消失了. 通过下列命令可以恢复 dconf reset -f /org/gnome/gnome-panel/ 参考这篇帖子: Upgrade ...
- Visual Studio 配置 Avalon 自动补全
以VS2013为例: 1.关闭 Visual Studio 2.打开 C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packa ...
- bellman-ford算法(判断有没有负环)
#include <iostream> #include <vector> #include<string> #include<cstring> usi ...
- 2017/05/20 java 基础 随笔
static 关键字的特点 1.随着类的加载而加载 2.优先于对象存在 3.被类的所有对象共享 如果某个成员变量是被所有对象共享的,那么他就应该定义为静态的 4.可以通过类名调用 其实它本身也可以通过 ...