Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
TLE的不行了,各位大侠帮忙看看代码吧# include <iostream> # include <algorithm> # include <vector> using namespace std; struct point { int start; int end; int len; }data[50001]; int n,m,r,num; int set[20001]; long long total; int cmppoint(const void *a,const void *b) { point *aa=(point *)a; point *bb=(point *)b; return aa->len-bb->len; } int det(int num) { int res=num; while(set[res]!=-1) res=set[res]; if(res!=num) set[num]=res; return res; } void kus() { for(int i=1;i<=r&&num<m+n;i++) { point temp=data[i]; int s=det(temp.start),e=det(temp.end); if(s==e) continue; num++; set[s]=e; total+=temp.len; } } int main() { int test; cin>>test; for(int testcount=1;testcount<=test;testcount++) { cin>>n>>m>>r; for(int i=0;i<m+n;i++) set[i]=-1;//初始化并查表 total=0; num=0; for(int i=1;i<=r;i++) { cin>>data[i].start>>data[i].end>>data[i].len; data[i].end=m+data[i].end; data[i].len=10000-data[i].len; } qsort(data+1,r,sizeof(point),cmppoint); kus(); for(int i=0;i<m+n&&num<n+m;i++) { if(det(i)==i) { total+=10000; num++; } } printf("%I64d\n",total); } return 0; } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator