社区讨论
这道题有拿最大生成树做的吗
P1967[NOIP 2013 提高组] 货车运输参与者 4已保存回复 5
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 5 条
- 当前快照
- 1 份
- 快照标识符
- @mi86gyh0
- 此快照首次捕获于
- 2025/11/21 09:24 4 个月前
- 此快照最后确认于
- 2025/11/21 09:24 4 个月前
我发现大数据我跑了59秒……太神仙了
这道题应该有别的做法吧……我就是想看看有没有人跟我的做法一样……(还跑的很快)
CPP#include<iomanip>
#include<cstring>
#include<algorithm>
using std::max;
using std::sort;
int f[50001];
inline int find(int k){
if(f[k]==k)return k;
return f[k]=find(f[k]);
}
struct node{
int a,b,val;
};
int cmp(node &a,node &b){
return a.val>b.val;
}
int n,m;
bool flag=false;
node qwq[100001];
inline int read(){
char p=0;int r=0,o=0;
for(;p<'0'||p>'9';o|=p=='-',p=getchar());
for(;p>='0'&&p<='9';r=(r<<1)+(r<<3)+(p^48),p=getchar());
return o?(~r)+1:r;
}
int main(){
n=read();m=read();
for(int i=1;i<=50000;i++)f[i]=i;
for(int i=1;i<=m;i++){
qwq[i].a=read();qwq[i].b=read();qwq[i].val=read();
}
sort(qwq+1,qwq+m+1,cmp);
int q;
q=read();
for(int i=1;i<=q;i++){
int x,y;
int num=0;
x=read();y=read();
for(int j=1;j<=m;j++){
if(find(x)!=find(y)){
f[find(qwq[j].a)]=find(qwq[j].b);
num=qwq[j].val;
}
else{
printf("%d\n",num);
flag=true;
break;
}
}
if(flag==false)printf("-1\n");
for(int i=1;i<=50000;i++)f[i]=i;
flag=false;
}
return 0;
}
回复
共 5 条回复,欢迎继续交流。
正在加载回复...