\(a+n\) 表示吃 \(a\) 的动物, \(a+2n\) 表示被 \(a\) 吃的动物,
同类:合并 \(x\) \(y\) , \(x+n\) \(y+n\) , \(x+2n\) \(y+2n\)
吃:合并 \(x\) \(y+n\) , \(x+n\) \(y+2n\) , \(x+2n\) \(y\)
判断假话:
同类:若 \(x\) \(y+n\) , \(x\) \(y+2n\) 假话
prim 板子
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e9;
int n,m,x,minn,k;
int f[2001][2001],c[2001];
bool b[2001];
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>f[0][i];
f[i][0]=f[0][i];
}
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
cin>>f[i][j];
}
}
for(int i=1;i<=n;i++)f[i][i]=maxn;
int ans=0;
b[0]=1;
for(int i=1;i<=n;i++)c[i]=f[0][i];
for(int i=1;i<=n;i++){
minn=maxn;
k=0;
for(int j=1;j<=n;j++)
if((!b[j])&&(c[j]<minn)){
minn=c[j];
k=j;
}
ans+=c[k];
b[k]=1;
for(int j=1;j<=n;j++){
if(f[k][j]<c[j])
c[j]=f[k][j];
}
}
cout<<ans;
return 0;
}
标签:int,嘲讽,假话,标题,2001,2n,五条
From: https://www.cnblogs.com/Z-kazuha/p/18438377