poj 1456
贪心+并查集。
代码:
#include<iostream>
#include<fstream>
using namespace std;
int n;
struct e{
int s,t;
};
int cmp(const void *a,const void *b){
return (*(e *)b).s-(*(e *)a).s;
}
e p[10001];
int f[10001];
void init(){
int i;
for(i=0;i<=10000;i++)
{
f[i]=i;
}
}
int father(int s){
if(s!=f[s])
f[s]=father(f[s]);
return f[s];
}
void unionset(int s,int t){
int i,j;
i=father(s);j=father(t);
f[i]=j;
}
void read(){
// ifstream cin("in.txt");
int i,j,k,s,t,ans;
while(cin>>n)
{
ans=0;
for(i=0;i<n;i++)
{
cin>>j>>k;
e b;
b.s=j;b.t=k;
p[i]=b;
}
qsort(p,n,sizeof(e),cmp);
init();
for(i=0;i<n;i++)
{
s=father(p[i].t);
if(s!=0)
{
ans+=p[i].s;
unionset(s,s-1);
}
}
cout<<ans<<endl;
}
}
int main(){
read();
return 0;
}
浙公网安备 33010602011771号