题目:
http://codevs.cn/problem/3315/
最小生成树模板题;
WA的原因:
没有考虑字符串L的长度,以为只有以为,于是l=s[0]-‘0’;
什么时候才永远不会犯这么低级的错误啊!!!
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
const int MAXN=2000001;
struct hh {int from,to,cost;}ma[MAXN];
struct sh {int x,y,z,t;}mp[MAXN];
int n,tot,sum,cnt;
int fa[MAXN];
string s;
int get(sh a,sh b)
{
return trunc(sqrt( (a.x-b.x) * (a.x-b.x) + (a.y-b.y) * (a.y-b.y) + (a.z-b.z) * (a.z-b.z) )) + abs(a.t-b.t);
}
void build(int f,int t,int c)
{
ma[++tot]=(hh){f,t,c};
return;
}
bool cmp(hh a,hh b)
{
return a.cost < b.cost;
}
int find(int x)
{
int r=x,t;
while(r!=fa[r]) r=fa[r];
while(x!=r) t=fa[x],fa[x]=r,x=t;
return r;
}
void kruskal()
{
for(int i=1;i<=n;i++) fa[i]=i;
sort(ma+1,ma+tot+1,cmp);
for(int i=1;i<=tot;i++)
{
int fx=find(ma[i].from),fy=find(ma[i].to);
if(fx!=fy)
{
fa[fx]=fy;
sum+=ma[i].cost;
}
}
return;
}
void solve()
{
scanf("%d",&n);
for(int i=1;i<=n;i++)
scanf("%d%d%d%d",&mp[i].x,&mp[i].y,&mp[i].z,&mp[i].t);
cin>>s;
for(int i=1;i<=n;i++)
for(int j=i+1;j<=n;j++)
build(i,j,get(mp[i],mp[j]));
kruskal();
int l=0;
for(int i=0;i<s.size();i++)
if(s[i]>='0' && s[i]<='9')
l=l*10+s[i]-'0';
if(sum>l) printf("Death\n");
else printf("%dTas\n",sum);
return;
}
int main()
{
solve();
return 0;
}