记录编号 382097 评测结果 AWAWWAWAWA
题目名称 [USACO Oct08] 挖水井 最终得分 50
用户昵称 GravatarTARDIS 是否通过 未通过
代码语言 C++ 运行时间 0.017 s
提交时间 2017-03-12 22:00:24 内存使用 0.61 MiB
显示代码纯文本
  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstdlib>
  4. #include<algorithm>
  5. #include<cmath>
  6. #include<vector>
  7. #define maxn 90001
  8. #define itn int
  9. using namespace std;
  10. struct edge{
  11. int from;
  12. int to;
  13. int dist;
  14. bool operator < (const edge&rhs)const{
  15. return dist<rhs.dist;
  16. }
  17. };
  18. int n;int w[maxn];edge E[maxn];int Mmin=2000000;
  19. int f[maxn];int temp,cnt=0,ans=0;
  20. inline int ff(int x){
  21. if (f[x]==x) return x;
  22. return f[x]=ff(f[x]);
  23. }
  24. inline bool unionn(int x,int y){
  25. int fax=ff(x);
  26. int fay=ff(y);
  27. if (fax==fay) return true;
  28. else {
  29. f[fax]=fay;
  30. return false;
  31. }
  32. }
  33. inline void kr(){
  34. for (int i=1;i<=cnt;i++){
  35. if (unionn(E[i].from,E[i].to)) continue;
  36. else {
  37. ans+=E[i].dist;
  38. }
  39. }
  40. }
  41. inline void readln(){
  42. freopen("water.in","r",stdin);
  43. freopen("water.out","w",stdout);
  44. scanf("%d",&n);
  45. for (int i=1;i<=n;i++){
  46. scanf("%d",&w[i]);
  47. Mmin=min(Mmin,w[i]);
  48. }
  49. for (int i=1;i<=n;i++){
  50. for (int j=1;j<=n;j++){
  51. scanf("%d",&temp);
  52. E[cnt].from=i;E[cnt].to=j;E[cnt].dist=temp;
  53. cnt++;
  54. }
  55. }
  56. for (int i=1;i<=n;i++){
  57. f[i]=i;
  58. }
  59. sort(E+1,E+cnt+1);
  60. }
  61. inline void p(){
  62. ans+=Mmin;
  63. printf("%d",ans);
  64. fclose(stdin);fclose(stdout);
  65. }
  66. int Main(){
  67. readln();
  68. kr();
  69. p();
  70. return 0;
  71. }
  72. int main(){;}
  73. int xlm=Main();