比赛 20100419 评测结果 RRRRR
题目名称 烟花的寿命 最终得分 0
用户昵称 苏轼 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-04-19 10:17:38
显示代码纯文本
  1. #include <cstdio>
  2. #include <vector>
  3. #include <algorithm>
  4. using namespace std;
  5.  
  6. const int MAXN=100,MAXINT=0x7fffffff;
  7.  
  8. struct Node
  9. {
  10. int i,j,w;
  11. };
  12.  
  13. bool comp(Node a,Node b)
  14. {
  15. return (a.w>b.w);
  16. }
  17.  
  18. void add(int);
  19.  
  20. int w[MAXN][MAXN],n;
  21. bool is[MAXN][MAXN];
  22. bool used[MAXN];
  23. vector<Node> v;
  24.  
  25. int main()
  26. {
  27. memset(is,false,sizeof(is));
  28. memset(used,false,sizeof(used));
  29. freopen("cityroad.in","r",stdin);
  30. freopen("cityroad.out","w",stdout);
  31. scanf("%d",&n);
  32. for(int i=0;i<n;i++)
  33. for(int j=0;j<n;j++)
  34. scanf("%d",&w[i][j]);
  35. make_heap(v.begin(),v.end(),comp);
  36. add(0);
  37. int p=0;
  38. while (p<n-1)
  39. {
  40. Node now=v.front();
  41. pop_heap(v.begin(),v.end(),comp);
  42. v.pop_back();
  43. if (used[now.i]&&used[now.j])continue;
  44. is[now.i][now.j]=is[now.j][now.i]=true;
  45. used[now.j]=used[now.i]=true;
  46. p++;
  47. }
  48. for(int i=0;i<n;i++)
  49. {
  50. printf("%d",is[i][0]);
  51. for(int j=1;j<n;j++)
  52. printf(" %d",is[i][j]);
  53. printf("\n");
  54. }
  55. }
  56.  
  57. void add(int x)
  58. {
  59. for(int i=0;i<n;i++)
  60. if (i!=x&&w[i][x]>0)
  61. {
  62. Node now={i,x,w[i][x]};
  63. v.push_back(now);
  64. push_heap(v.begin(),v.end(),comp);
  65. }
  66. }