•A 国有 n 座城市,编号从 1 到 n,城市之间有 m 条双向道路。每一条道路对车辆都有重量限制,简称限重。现在有 q 辆货车在运输货物,司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重的货物。
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
struct node
{
int u;
int v;
int w;
}edge[];
int num=;
int maxn[][];
int f[];
int x,y;
int ans=0x7fffffff;
int cmp(const node &a,const node &b)
{
return a.w>b.w;
}
int find(int x)
{
if(x!=f[x])
f[x]=find(f[x]);
return f[x];
}
void unionn(int x,int y)
{
int fx=find(x);
int fy=find(y);
f[fx]=fy;
}
int vis[];
int n,m;
int flag=;
int dfs(int p)
{
if(p==y)
flag=;
else
{
for(int i=;i<=n;i++)
{
if(vis[i]==&&maxn[p][i]!=0x7fffffff)
{
vis[i]=;
ans=min(ans,maxn[p][i]);
dfs(i);
vis[i]=;
ans=min(ans,maxn[p][i]);
} }
}
//printf("%d",ans);
}
int main()
{ scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)f[i]=i;
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&edge[num].u,&edge[num].v,&edge[num].w);
num++;
}
sort(edge+,edge+num,cmp);
int k=;
for(int i=;i<=num;i++)
{
if(find(edge[i].u)!=find(edge[i].v))
{
unionn(edge[i].u,edge[i].v);
//maxn[edge[i].v]=max(edge[i].w,maxn[edge[i].v]);
//maxn[edge[i].u]=max(edge[i].w,maxn[edge[i].u]);
maxn[edge[i].u][edge[i].v]=max(maxn[edge[i].u][edge[i].v],edge[i].w);
maxn[edge[i].v][edge[i].u]=max(maxn[edge[i].u][edge[i].v],edge[i].w);
k++;
}
if(k==n-)break;
}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(maxn[i][j]==)
maxn[i][j]=0x7fffffff;
}
/*for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(maxn[i][k]!=0x7fffffff&&maxn[k][j]!=0x7fffffff)
if(maxn[i][j]>maxn[i][k]+maxn[k][j])
maxn[i][j]=maxn[i][k]+maxn[k][j];
}
}
}*/
int q;
scanf("%d",&q);
for(int i=;i<=q;i++)
{
flag=;
memset(vis,,sizeof(vis));
ans=0x7fffffff;
scanf("%d%d",&x,&y);
dfs(x);
//printf("*******************************\n");
if(ans!=0x7fffffff&&flag==)
printf("%d\n",ans);
else
printf("-1\n");
//printf("*******************************\n");
/*if(maxn[x][y]==0)
printf("-1\n");
else
printf("%d\n",maxn[x][y]);*/
/*for(int j=x;j<=y;j++)
{
if(maxn[j]<maxnnow&&maxn[j]!=0)
maxnnow=maxn[j];
}
if(maxnnow==0x7ffff)printf("-1\n");
else printf("%d\n",maxnnow);*/
}
return ;
}
 #include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
struct node
{
int u;
int v;
int w;
}edge[];
int num=;
int maxn[][];
int f[];
int x,y;
int ans=0x7fffffff;
int cmp(const node &a,const node &b)
{
return a.w>b.w;
}
int find(int x)
{
if(x!=f[x])
f[x]=find(f[x]);
return f[x];
}
void unionn(int x,int y)
{
int fx=find(x);
int fy=find(y);
f[fx]=fy;
}
int vis[];
int n,m;
int flag=;
int dfs(int p)
{
if(p==y)
flag=;
else
{
for(int i=;i<=n;i++)
{
if(vis[i]==&&maxn[p][i]!=0x7fffffff)
{
vis[i]=;
ans=min(ans,maxn[p][i]);
dfs(i);
vis[i]=;
ans=min(ans,maxn[p][i]);
} }
}
//printf("%d",ans);
}
int main()
{ scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)f[i]=i;
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&edge[num].u,&edge[num].v,&edge[num].w);
num++;
}
sort(edge+,edge+num,cmp);
int k=;
for(int i=;i<=num;i++)
{
if(find(edge[i].u)!=find(edge[i].v))
{
unionn(edge[i].u,edge[i].v);
//maxn[edge[i].v]=max(edge[i].w,maxn[edge[i].v]);
//maxn[edge[i].u]=max(edge[i].w,maxn[edge[i].u]);
maxn[edge[i].u][edge[i].v]=max(maxn[edge[i].u][edge[i].v],edge[i].w);
maxn[edge[i].v][edge[i].u]=max(maxn[edge[i].u][edge[i].v],edge[i].w);
k++;
}
if(k==n-)break;
}
for(int i=;i<=n;i++)
for(int j=;j<=n;j++)
{
if(maxn[i][j]==)
maxn[i][j]=0x7fffffff;
}
/*for(int k=1;k<=n;k++)
{
for(int i=1;i<=n;i++)
{
for(int j=1;j<=n;j++)
{
if(maxn[i][k]!=0x7fffffff&&maxn[k][j]!=0x7fffffff)
if(maxn[i][j]>maxn[i][k]+maxn[k][j])
maxn[i][j]=maxn[i][k]+maxn[k][j];
}
}
}*/
int q;
scanf("%d",&q);
for(int i=;i<=q;i++)
{
flag=;
memset(vis,,sizeof(vis));
ans=0x7fffffff;
scanf("%d%d",&x,&y);
dfs(x);
//printf("*******************************\n");
if(ans!=0x7fffffff&&flag==)
printf("%d\n",ans);
else
printf("-1\n");
//printf("*******************************\n");
/*if(maxn[x][y]==0)
printf("-1\n");
else
printf("%d\n",maxn[x][y]);*/
/*for(int j=x;j<=y;j++)
{
if(maxn[j]<maxnnow&&maxn[j]!=0)
maxnnow=maxn[j];
}
if(maxnnow==0x7ffff)printf("-1\n");
else printf("%d\n",maxnnow);*/
}
return ;
}

NOIP2013Day1T3 表示只能过一个点的更多相关文章

  1. 解决微信授权回调页面域名只能设置一个的问题 [php]

    最终的解决方案是:https://github.com/liuyunzhuge/php_weixin_proxy,详细的介绍请往下阅读. 在做项目集成微信登录以及微信支付的时候,都需要进行用户授权.这 ...

  2. 当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式。

    当没有用 EXISTS 引入子查询时,在选择列表中只能指定一个表达式.比如 select * from T_Employee where FNumber not in ( select top 5*  ...

  3. 一个java源文件中为什么只能有一个public类。

    我们都遇到过一个源文件中有多个java类,但当第一个类使用public修饰时,如果下面还有类使用public修饰,会报错.也就是是说一个java源文件最多只能有一个public类. 当有一个publi ...

  4. 让powershell同时只能运行一个脚本(进程互斥例子)

    powershell,mutex,互斥,进程互斥,脚本互斥 powershell脚本互斥例子,在powershell类别文章中,声明原创唯一. powershell 传教士 原创文章 2016-07- ...

  5. 怎么取消 Windows Server 2012 r2 RDP 限制每个用户只能进行一个会话(转)

    在 Windows Server 2008 / 2008 R2 上,如果希望多个远程用户使用同一个账号同时访问服务器的 Remote Desktop(RDP),只需通过管理工具-远程桌面下的“远程桌面 ...

  6. 解决微信OAuth2.0网页授权回调域名只能设置一个的问题

    https://github.com/HADB/GetWeixinCode GetWeixinCode 解决微信OAuth2.0网页授权回调域名只能设置一个的问题 使用方法 部署get-weixin- ...

  7. SSAS的维度表之间的关系只能有一个不能有多个

    我们在SSAS中创建维度的时候,有时候可能一个维度需要用到多个表的字段作为维度属性,那么这多个表之间势必存在关联关系,但是切记维度表之间的关联关系有且只能有一个不能有多个,下面我们来看一个例子. 现在 ...

  8. java区分大小写,使用TAB进行缩进,public类名只能有一个,而且文件名与类名保持一致.

    java的类必须大写 java区分大小写,使用TAB进行缩进,public类名只能有一个,而且文件名与类名保持一致. 在dos用上下箭头,调用已用过的命令

  9. 此集合已经采用方案 http 的地址。此集合中每个方案中最多只能包含一个地址。

    错误信息:此集合已经采用方案 http 的地址.此集合中每个方案中最多只能包含一个地址.如果服务承载于 IIS 中,则可以通过将“system.serviceModel/serviceHostingE ...

随机推荐

  1. Impala介绍

    Impala介绍 Impala支持的文件格式 Impala可以对Hadoop中大多数格式的文件进行查询.它能通过create table和insert的方式将一部分格式的数据加载到table中,但值得 ...

  2. [转] Hibernate不能自动建表解决办法(hibernate.hbm2ddl.auto) (tables doesn't exist)

    转自: http://blog.csdn.net/biangren/article/details/8010018 最近开始学Hibernate,看的是李刚的那本<轻量级java ee企业应用实 ...

  3. Elasticsearch集群使用ik分词器

    IK分词插件的安装 ES集群环境 VMWare下三台虚拟机Ubuntu 14.04.2 LTS JDK 1.8.0_66 Elasticsearch 2.3.1 elasticsearch-jdbc- ...

  4. jq中打开新页面 并获取携带值

    打开新页面:window.location.href = "./index.html?id=1"获取携带值: function GetRequest() { var url = l ...

  5. FUI- 我离钢铁侠还差几步?

    本文来自网易云社区 作者:马宝 什么是FUI本文不累赘的可以自行Google,喜欢科幻的同学们都看一张图就能感受到FUI的魅力. 本文算是一篇所见即所的,可边学边干的原创教程.总结全文就一句话,&qu ...

  6. OpenStack基础知识-打包知识点

    OpenStack是使用setuptools工具来进行打包,不过为了满足OpenStack项目的需求,引入了一个辅助工具pbr来配合setuptools完成打包工作. pbr (Python Buil ...

  7. Java学习笔记——Map接口

    Map接口 Map接口 Map接口中键和值一一映射. 可以通过键来获取值. 异常 NoSuchElementException:访问的值不存在 ClassCastException:对象类型错误 Un ...

  8. PAT天梯赛L2-008 最长对称字符串

    题目链接:点击打开链接 对给定的字符串,本题要求你输出最长对称子串的长度.例如,给定"Is PAT&TAP symmetric?",最长对称子串为"s PAT&a ...

  9. 关于php命名空间的理解

    以phpmailer这个类库为例,composer自动加载好该类库,有用的文件都放在src这个目录下 这些文件的命名空间都是这个:namespace PHPMailer\PHPMailer; 如果我们 ...

  10. Power BI

    前几天,Excel 2016悄悄更新了一个功能:将工作簿上载到Power BI 但这新功能并不显眼,藏在[发布]里: 然而,按照微软的一贯风格,功能隐藏越深,装逼效果越佳.你看“ Power Bi ” ...