社区讨论

这道题有拿最大生成树做的吗

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 条回复,欢迎继续交流。

正在加载回复...