poj 2485
#include<iostream>
#include<fstream>
using namespace std;
int n;
int f[501];
int rank[501];
struct e{
int s,t,w;
};
e edge[250001];
void init(){
for(int i=1;i<=n;i++)
{
f[i]=i;
rank[i]=0;
}
}
int top;
void add(int s,int t,int w){
edge[++top].s=s;
edge[top].t=t;
edge[top].w=w;
}
int cmp(const void *a,const void *b){
return (*(e *)a).w-(*(e*)b).w;
}
int father(int s){
if(s!=f[s])
f[s]=father(f[s]);
return f[s];
}
void unionset(int s,int t){
int i=father(s);
int j=father(t);
if(rank[i]<rank[j])
f[i]=j;
else
{
f[j]=i;
if(rank[i]==rank[j])
rank[i]++;
}
}
void solve(){
int i,j,k;
qsort(edge+1,top,sizeof(e),cmp);
j=0;
for(i=1;i<=top;i++)
{
if(father(edge[i].s)!=father(edge[i].t))
{
j++;
if(j==n-1)
{
cout<<edge[i].w<<endl;
return;
}
unionset(edge[i].s,edge[i].t);
}
}
}
void read(){
// ifstream cin("in.txt");
int i,j,k;
int cas;
cin>>cas;
while(cas--)
{
cin>>n;
top=0;
init();
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cin>>k;
if(i>j)
add(i,j,k);
}
solve();
}
}
int main(){
read();
return 0;
}
#include<fstream>
using namespace std;
int n;
int f[501];
int rank[501];
struct e{
int s,t,w;
};
e edge[250001];
void init(){
for(int i=1;i<=n;i++)
{
f[i]=i;
rank[i]=0;
}
}
int top;
void add(int s,int t,int w){
edge[++top].s=s;
edge[top].t=t;
edge[top].w=w;
}
int cmp(const void *a,const void *b){
return (*(e *)a).w-(*(e*)b).w;
}
int father(int s){
if(s!=f[s])
f[s]=father(f[s]);
return f[s];
}
void unionset(int s,int t){
int i=father(s);
int j=father(t);
if(rank[i]<rank[j])
f[i]=j;
else
{
f[j]=i;
if(rank[i]==rank[j])
rank[i]++;
}
}
void solve(){
int i,j,k;
qsort(edge+1,top,sizeof(e),cmp);
j=0;
for(i=1;i<=top;i++)
{
if(father(edge[i].s)!=father(edge[i].t))
{
j++;
if(j==n-1)
{
cout<<edge[i].w<<endl;
return;
}
unionset(edge[i].s,edge[i].t);
}
}
}
void read(){
// ifstream cin("in.txt");
int i,j,k;
int cas;
cin>>cas;
while(cas--)
{
cin>>n;
top=0;
init();
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
cin>>k;
if(i>j)
add(i,j,k);
}
solve();
}
}
int main(){
read();
return 0;
}
浙公网安备 33010602011771号