都是纯板子题

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<string>
#include<stack>
#include<queue>
#include<vector>
#include<cstdlib>
//#include<windows.h>
#define first fi
#define second se
using namespace std;
typedef long long ll;
const int N = 1e6+10;
const int INF = 0x3f3f3f3f;
const int inf = - INF;
const int mod = 1e9+7;
const double pi = acos(-1.0);
int n,m;
int father[505];
void init(){
    m=0;
    memset(father,-1,sizeof(father));
}
struct node {
    int u,v,w;
    node(){}
    node(int u,int v, int w):u(u),v(v),w(w){}
    bool operator < (const node &rhs)const{
        return w < rhs.w;
    }
}edge[N]; 
int Find(int x){
    return father[x]==-1?x:father[x]=Find(father[x]);
}
int Kruskal(){
    int maxn=-1;
    int cnt=0;
    for(int i=0;i<m;i++){
        int u=edge[i].u;
        int v=edge[i].v;
        if(Find(u)!=Find(v)){
            father[Find(u)]=Find(v);
            maxn=max(maxn,edge[i].w);
            if(++cnt>=n-1) return maxn;  
        }
    }
    return -1;
}
int main(){
    int T;
    scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        init();
        int t;
        for(int i=1;i<=n;i++){
            for(int j=1;j<=n;j++){
                scanf("%d",&t);
                edge[m++]=node(i,j,t);
            }
        }
        sort(edge,edge+m);
        printf("%d\n",Kruskal());
    }
    //system("pause");
    return 0;
}

1258可以直接用2485改改就交,注意要多组输入。

#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<cmath>
#include<string>
#include<stack>
#include<queue>
#include<vector>
#include<cstdlib>
#include<windows.h>
#define first fi
#define second se
using namespace std;
typedef long long ll;
const int N = 1e6+10;
const int INF = 0x3f3f3f3f;
const int inf = - INF;
const int mod = 1e9+7;
const double pi = acos(-1.0);
ll n,m;
ll father[505];
void init(){
    m=0;
    memset(father,-1,sizeof(father));
}
struct node {
    ll u,v,w;
    node(){}
    node(ll u,ll v, ll w):u(u),v(v),w(w){}
    bool operator < (const node &rhs)const{
        return w < rhs.w;
    }
}edge[N]; 
ll Find(int x){
    return father[x]==-1?x:father[x]=Find(father[x]);
}
ll Kruskal(){
    ll sum=0;
    ll cnt=0;
    for(ll i=0;i<m;i++){
        ll u=edge[i].u;
        ll v=edge[i].v;
        if(Find(u)!=Find(v)){
            father[Find(u)]=Find(v);
            sum+=edge[i].w;
            if(++cnt>=n-1) return sum;  
        }
    }
    return -1;
}
int main(){
    //int T;
    //scanf("%d",&T);
    while(~scanf("%lld",&n)){//注意多组输入
        init();
        ll t;
        for(ll i=1;i<=n;i++){
            for(ll j=1;j<=n;j++){
                scanf("%lld",&t);
                edge[m++]=node(i,j,t);
            }
        }
        sort(edge,edge+m);
        printf("%d\n",Kruskal());
    }
    system("pause");
    return 0;
}