RE和MLE共存,这~~难道是人性的扭曲还是道德的沦丧~~。

P3916 图的遍历

```cpp #include<iostream> #include<cstdio> using namespace std; int c,k,startx,starty; int dt[401][401]; bool flag=0; void move(int jd) { for(int i=1;i<=c;i++) { for(int ii=1;ii<=k;ii++) { if (dt[i][ii]==jd-1) { if (dt[i-2][ii-1]==0&&i-2>=1) {dt[i-2][ii-1]=jd;flag=1;} if (dt[i+2][ii-1]==0&&i+2<=c) {dt[i+2][ii-1]=jd;flag=1;} if (dt[i-2][ii+1]==0&&i-2>=1) {dt[i-2][ii+1]=jd;flag=1;} if (dt[i+2][ii+1]==0&&i+2<=c) {dt[i+2][ii+1]=jd;flag=1;} if (dt[i-1][ii-2]==0&&ii-2>=1) {dt[i-1][ii-2]=jd;flag=1;} if (dt[i+1][ii-2]==0&&ii-2>=1) {dt[i+1][ii-2]=jd;flag=1;} if (dt[i-1][ii+2]==0&&ii+2<=k) {dt[i-1][ii+2]=jd;flag=1;} if (dt[i+1][ii+2]==0&&ii+2<=k) {dt[i+1][ii+2]=jd;flag=1;} } } } if (flag==0) return; else {flag=0;move(jd+1);} } int main() { cin>>c>>k>>startx>>starty; dt[startx][starty]=1; move(2); for(int i=1;i<=c;i++) { for(int ii=1;ii<=k;ii++) { if (dt[i][ii]!=0) printf("%-5d", dt[i][ii]-1); else cout<<"-1 "; } cout<<endl; } } ``` QAQ
by twelveZ @ 2018-09-14 23:13:19


@[AC机的朋友AC鸭](/space/show?uid=107232) 一题图论被你做成了什么鬼………………
by 雪绮晶 @ 2018-09-14 23:18:26


@[雪绮晶](/space/show?uid=110460) 233误导~~实际看错题目了~~
by twelveZ @ 2018-09-14 23:24:57


@[AC机的朋友AC鸭](/space/show?uid=107232) 这题明明是tarJan缩点或者dfs100次…………
by 雪绮晶 @ 2018-09-14 23:30:09


@[l_water](/space/show?uid=51164) %%%大佬,我乱写了个dfs...
by Sai0511 @ 2018-09-14 23:47:44


@[l_water](/space/show?uid=51164) tarjan什么鬼-_-|| 明明就是topsort
by nothingness @ 2018-09-15 07:18:44


@[nothingness](/space/show?uid=31317) 纳尼????不是tarjan缩点吗?
by l_water @ 2018-09-15 13:59:18


@[l_water](/space/show?uid=51164) 我就简单的拓扑过的 神奇乱搞算法(不过速度太慢了,100ms) ``` #include "bits/stdc++.h" #define N 200001 using namespace std; int n,m,t1,t2,p,f[N]; int k,b[N],first[N],next[N],last[N]; int q[N],h,t; int add(int x,int y) { k++; b[k]=y; if(first[x]==0) first[x]=k; else next[last[x]]=k; last[x]=k; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { scanf("%d%d",&t1,&t2); add(t2,t1); } for(int i=n;i>0;i--) if(!f[i]) { h=t=0; q[++t]=i; f[i]=i; while(h<t) { p=first[q[++h]]; while(p) { if(f[q[h]]>f[b[p]]) { f[b[p]]=f[q[h]]; q[++t]=b[p]; } p=next[p]; } } } for(int i=1;i<=n;i++) printf("%d ",f[i]); return 0; } ```
by nothingness @ 2018-09-15 14:50:16


|