• 22/6/29


    1,cf Solve The Maze;2,acwing 1191.家谱树;3,acwing 1192.奖金;


    1,cf solve the maze

    题意:给出n*m 的矩阵,'.'代表空地,'#'代表墙,'B'代表坏人,'G'代表好人,你现在可以在任意空地上加墙,来使得好人可以到的第(n,m)块地,坏人无法到达;如果可以这样,输出yes,否则输出no;

    思路:直接给坏人围墙,然后从(n,m)bfs,如果能遍历到所有好人,就是yes;

    注意特判:没有好人就是yes;好人和坏人挨着,no;终点是墙,no;

    细节:注意bfs标记st为1的时机,放入队列的时候就标记,而不是出队在标记;后者会导致tle;

    1. #pragma GCC optimize(2)
    2. #include<bits/stdc++.h>
    3. #define rep1(i,a,n) for( int i=a;i<n;++i)
    4. #define rep2(i,a,n) for( int i=a;i<=n;++i)
    5. #define per1(i,n,a) for( int i=n;i>a;i--)
    6. #define per2(i,n,a) for( int i=n;i>=a;i--)
    7. #define quick_cin() cin.tie(0),cout.tie(0),ios::sync_with_stdio(false)
    8. #define mset(a,i,b) memset((a),(i),sizeof (b))
    9. #define mcpy(a,i,b) memcpy((a),(i),sizeof (b))
    10. #define pro_q priority_queue
    11. #define pb push_back
    12. #define pf push_front
    13. #define endl "\n"
    14. #define lowbit(m) ((-m)&(m))
    15. #define YES cout<<"YES\n"
    16. #define NO cout<<"NO\n"
    17. #define Yes cout<<"Yes\n"
    18. #define No cout<<"No\n"
    19. #define yes cout<<"yes\n"
    20. #define no cout<<"no\n"
    21. #define yi first
    22. #define er second
    23. #define INF 0x3f3f3f3f
    24. using namespace std;
    25. typedef pair<int,int> PII;
    26. typedef pair<long long,long long>PLL;
    27. typedef pair<int,PII> PIII;
    28. typedef long long LL;
    29. typedef double dob;
    30. const int N=110;
    31. int n,m;
    32. char a[N][N];
    33. vector<PII>g,b;
    34. int dx[]={0,1,0,-1};
    35. int dy[]={1,0,-1,0};
    36. int st[N][N];
    37. void bfs()
    38. {
    39. queue<PII>q;
    40. q.push({n,m});
    41. while(q.size())
    42. {
    43. auto t=q.front();
    44. q.pop();
    45. int x=t.yi,y=t.er;
    46. rep1(i,0,4)
    47. {
    48. int xx=x+dx[i];
    49. int yy=y+dy[i];
    50. if(xx<1||yy<1||xx>n||yy>m||a[xx][yy]=='#'||st[xx][yy])continue;
    51. q.push({xx,yy});
    52. st[xx][yy]=1;
    53. }
    54. }
    55. }
    56. void solve()
    57. {
    58. cin>>n>>m;
    59. mset(a,0,a);
    60. mset(st,0,st);
    61. g.clear();
    62. b.clear();
    63. rep2(i,1,n)
    64. rep2(j,1,m)
    65. {
    66. cin>>a[i][j];
    67. if(a[i][j]=='B')b.pb({i,j});
    68. if(a[i][j]=='G')g.pb({i,j});
    69. }
    70. if(!g.size())
    71. {
    72. YES;
    73. return;
    74. }
    75. int bsiz=b.size();
    76. rep1(i,0,bsiz)
    77. {
    78. rep1(j,0,4)
    79. {
    80. int x=b[i].yi+dx[j];
    81. int y=b[i].er+dy[j];
    82. if(a[x][y]=='G')
    83. {
    84. NO;
    85. return;
    86. }
    87. if(a[x][y]=='.')a[x][y]='#';
    88. }
    89. }
    90. if(a[n][m]=='#')
    91. {
    92. NO;
    93. return;
    94. }
    95. bfs();
    96. int gsiz=g.size();
    97. rep1(i,0,gsiz)
    98. {
    99. if(!st[g[i].yi][g[i].er])
    100. {
    101. NO;
    102. return;
    103. }
    104. }
    105. YES;
    106. }
    107. signed main()
    108. {
    109. quick_cin();
    110. int T;
    111. cin>>T;
    112. while(T--)solve();
    113. return 0;
    114. }

    浅记一下memset中,sizeof 和数字的区别

    sizeof 跟一个数字,然后得到数组的长度,所以不能sizeof(40),这是错误的;

    而单独数字,则代表40个字节长度,int 单位字节长度是4,所以10*4=40;

    2,家谱树;

     思路:简单拓扑排序,注意add(a,b)和d[b]++;

    1. #pragma GCC optimize(2)
    2. #include<bits/stdc++.h>
    3. #define rep1(i,a,n) for( int i=a;i<n;++i)
    4. #define rep2(i,a,n) for( int i=a;i<=n;++i)
    5. #define per1(i,n,a) for( int i=n;i>a;i--)
    6. #define per2(i,n,a) for( int i=n;i>=a;i--)
    7. #define quick_cin() cin.tie(0),cout.tie(0),ios::sync_with_stdio(false)
    8. #define memset(a,i,b) memset((a),(i),sizeof (b))
    9. #define memcpy(a,i,b) memcpy((a),(i),sizeof (b))
    10. #define pro_q priority_queue
    11. #define pb push_back
    12. #define pf push_front
    13. #define endl "\n"
    14. #define lowbit(m) ((-m)&(m))
    15. #define YES cout<<"YES\n"
    16. #define NO cout<<"NO\n"
    17. #define Yes cout<<"Yes\n"
    18. #define No cout<<"No\n"
    19. #define yes cout<<"yes\n"
    20. #define no cout<<"no\n"
    21. #define yi first
    22. #define er second
    23. #define INF 0x3f3f3f3f
    24. using namespace std;
    25. typedef pair<int,int> PII;
    26. typedef pair<long long,long long>PLL;
    27. typedef pair<int,PII> PIII;
    28. typedef long long LL;
    29. typedef double dob;
    30. int n;
    31. const int N=1e5+10;
    32. int e[N],ne[N],h[N],idx;
    33. int d[N];
    34. void add(int a,int b)
    35. {
    36. e[idx]=b,ne[idx]=h[a],h[a]=idx++;
    37. }
    38. vector<int>ans;
    39. void topsort()
    40. {
    41. queue<int>q;
    42. rep2(i,1,n)if(!d[i])q.push(i);
    43. while(q.size())
    44. {
    45. int t=q.front();
    46. q.pop();
    47. ans.pb(t);
    48. for(int i=h[t];~i;i=ne[i])
    49. {
    50. int j=e[i];
    51. d[j]--;
    52. if(d[j]==0)
    53. {
    54. q.push(j);
    55. }
    56. }
    57. }
    58. }
    59. signed main()
    60. {
    61. quick_cin();
    62. memset(h,-1,h);
    63. cin>>n;
    64. rep2(i,1,n)
    65. {
    66. int x;
    67. while(cin>>x,x)
    68. {
    69. add(i,x);
    70. d[x]++;
    71. }
    72. }
    73. //rep2(i,1,n)cout<<d[i]<<endl;
    74. topsort();
    75. int siz=ans.size();
    76. rep1(i,0,siz)cout<<ans[i]<<" ";
    77. return 0;
    78. }

    3,奖金;

    递推关系,拓扑序列; 

    1. #pragma GCC optimize(2)
    2. #include<bits/stdc++.h>
    3. #define rep1(i,a,n) for( int i=a;i<n;++i)
    4. #define rep2(i,a,n) for( int i=a;i<=n;++i)
    5. #define per1(i,n,a) for( int i=n;i>a;i--)
    6. #define per2(i,n,a) for( int i=n;i>=a;i--)
    7. #define quick_cin() cin.tie(0),cout.tie(0),ios::sync_with_stdio(false)
    8. #define memset(a,i,b) memset((a),(i),sizeof (b))
    9. #define memcpy(a,i,b) memcpy((a),(i),sizeof (b))
    10. #define pro_q priority_queue
    11. #define pb push_back
    12. #define pf push_front
    13. #define endl "\n"
    14. #define lowbit(m) ((-m)&(m))
    15. #define YES cout<<"YES\n"
    16. #define NO cout<<"NO\n"
    17. #define Yes cout<<"Yes\n"
    18. #define No cout<<"No\n"
    19. #define yes cout<<"yes\n"
    20. #define no cout<<"no\n"
    21. #define yi first
    22. #define er second
    23. #define INF 0x3f3f3f3f
    24. using namespace std;
    25. typedef pair<int,int> PII;
    26. typedef pair<long long,long long>PLL;
    27. typedef pair<int,PII> PIII;
    28. typedef long long LL;
    29. typedef double dob;
    30. int n,m;
    31. const int N=1e5+10;
    32. int e[N],ne[N],h[N],idx;
    33. int d[N],dist[N];
    34. void add(int a,int b)
    35. {
    36. e[idx]=b,ne[idx]=h[a],h[a]=idx++;
    37. }
    38. vector<int>xl;
    39. bool topsort()
    40. {
    41. queue<int>q;
    42. rep2(i,1,n)if(!d[i])q.push(i);
    43. while(q.size())
    44. {
    45. int t=q.front();
    46. q.pop();
    47. xl.pb(t);
    48. for(int i=h[t];~i;i=ne[i])
    49. {
    50. int j=e[i];
    51. d[j]--;
    52. if(d[j]==0)
    53. {
    54. q.push(j);
    55. }
    56. }
    57. }
    58. return xl.size()==n;
    59. }
    60. signed main()
    61. {
    62. quick_cin();
    63. memset(h,-1,h);
    64. cin>>n>>m;
    65. while (m--)
    66. {
    67. int a,b;
    68. cin>>a>>b;
    69. add(b,a);
    70. d[a]++;
    71. }
    72. if(!topsort())cout<<"Poor Xed";
    73. else
    74. {
    75. rep2(i,1,n)dist[i]=100;
    76. int siz=xl.size();
    77. rep1(i,0,siz)
    78. {
    79. int j=xl[i];
    80. for(int k=h[j];~k;k=ne[k])
    81. {
    82. int jj=e[k];
    83. dist[jj]=max(dist[jj],dist[j]+1);
    84. }
    85. }
    86. int ans=0;
    87. rep2(i,1,n)ans+=dist[i];
    88. cout<<ans;
    89. }
    90. return 0;
    91. }

     

  • 相关阅读:
    OpenCV实战(27)——追踪视频中的特征点
    HTML本地离线缓存?
    【客户案例】脊叶架构(Spine-Leaf)的云化园区网络部署实践
    Pandas:强大的Python数据分析工具包
    Python异常处理——走BUG的路,让BUG无处可走
    北斗导航 | 基于MHSS的ARAIM算法研究(附Matlab源代码)
    ubuntu20.04 nvidia显卡驱动掉了,变成开源驱动,在软件与更新里选择专有驱动,下载出错,调整ubuntu镜像源之后成功修复
    053_末晨曦Vue技术_处理边界情况之递归组件
    【教程】Ubuntu自动查看有哪些用户名与密码相同的账户,并统一修改密码
    AXI协议详解(1)-协议简介
  • 原文地址:https://blog.csdn.net/aidaqiudeaichao/article/details/125523925