•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. sort,uniq,cut,wc命令详解

    sortsort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语法 s ...

  2. 11、scala类型参数

    一.类型参数1 1.介绍 类型参数是什么?类型参数其实就类似于Java中的泛型.先说说Java中的泛型是什么,比如我们有List a = new ArrayList(),接着a.add(1),没问题, ...

  3. AT指令集

    通用指令 at+cala   设置警报日期和时间 at+cgmi  厂家认证请求,返回模块厂家信 at+cgmm 模式认证请求,返回模块使用频段 at+cgmr 修正认证请求,返回软件版本 at+cg ...

  4. 我的windows软件

    1.360安全卫士 http://www.360.cn/ 装好系统后用它来卸载预装软件,杀毒,关闭开机启动项和清理垃圾 2.QQ http://im.qq.com/download/ 手机和电脑通信 ...

  5. ES Docs-3:Modifying Data

    Modifying Data Indexing/Replacing Documents curl -XPUT 'localhost:9200/customer/external/1?pretty' - ...

  6. [转载]Java程序员掌握的10大项知识体系--精通太难说出口

    1.语法:必须比较熟悉,在写代码的时候IDE的编辑器对某一行报错应该能够根据报错信息知道是什么样的语法错误并且知道任何修正. 2.命令:必须熟悉JDK带的一些常用命令及其常用选项,命令至少需要熟悉:a ...

  7. 33、生鲜电商平台-定时器,定时任务quartz的设计与架构

    说明:任何业务有时候需要系统在某个定点的时刻执行某些任务,比如:凌晨2点统计昨天的报表,早上6点抽取用户下单的佣金. 对于Java开源生鲜电商平台而言,有定时推送客户备货,定时计算卖家今日的收益,定时 ...

  8. nej 搭配 vue 方案

    此文已由作者张磊授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 前言 目前项目使用的技术是 nej + regular,路由方面是使用 nej 自带的,随着时间推移,项目已经 ...

  9. nessus安装及使用

    1.安装注册 (1)从https://www.tenable.com/products/nessus/select-your-operating-system上下载对应操作系统版本的nessus,结果 ...

  10. 洛谷P3070 [USACO13JAN]岛游记Island Travels

    P3070 [USACO13JAN]岛游记Island Travels 题目描述 Farmer John has taken the cows to a vacation out on the oce ...