123456seh2 @ 2018-05-17 20:27:49
为什么我直接用字符串读入会WA,改成逐字符读入就A了 https://www.luogu.org/record/show?rid=7349704 https://www.luogu.org/record/show?rid=7350739
by 温情 @ 2018-05-17 20:31:59
看看帮助中的常见“我在本地/xxOJ AC了、洛谷却不过”的原因
by 123456seh2 @ 2018-05-17 20:36:17
@温情 这跟“本地AC,洛谷WA”有关系吗 我是读入的问题啊
by 温情 @ 2018-05-17 20:40:16
@123456seh2 您没有贴代码,我也不知道您是用什么语言什么字符串读入的.
C中的gets还是C++的getline?
这样的字符串读入在linux评测机下是会产生一些问题的.
具体什么问题我太蒻了不知道.
但是记住一点就好了,尽量尽量不要使用上面说的那两个读入就好了.可能会蜜汁WA.
(逃
by 123456seh2 @ 2018-05-17 20:41:15
// luogu-judger-enable-o2
#include<bits/stdc++.h>
#define min(a,b) (a<b)?a:b
#define N 10010
using namespace std;
struct edge{int ne,to;}e[N<<2];
int t,n,m,x,y,head[N],opt1,opt2,esum,ans;
int scc,cnt,top,vis[N],bel[N],dfn[N],low[N],sta[N];
char s1[10],s2[10];
void add(int x,int y){
e[++esum]=(edge){head[x],y};
head[x]=esum;
}
void tarjan(int x){
dfn[x]=low[x]=++cnt,sta[++top]=x,vis[x]=1;
for(int i=head[x];i;i=e[i].ne){
int v=e[i].to;
if (!dfn[v]) {
tarjan(v);
low[x]=min(low[x],low[v]);
}else if(vis[v]) low[x]=min(low[x],dfn[v]);
}
if(dfn[x]==low[x]){
scc++;
do{
bel[sta[top]]=scc;
vis[sta[top]]=0;
}while(sta[top--]!=x);
}
}
int main(){
scanf("%d",&t);
while(t--){
scanf("%d%d",&n,&m);
top=cnt=esum=ans=scc=0;
memset(head,0,sizeof(head));
memset(vis,0,sizeof(vis));
memset(dfn,0,sizeof(dfn));
memset(low,0,sizeof(low));
for(int i=1;i<=m;i++){
scanf("%s%s",s1,s2);
if (s1[0]=='m') opt1=0;else opt1=1;
if (s2[0]=='m') opt2=0;else opt2=1;
add((s1[1]^48)*2-(!opt1),(s2[1]^48)*2-opt2);
add((s2[1]^48)*2-(!opt2),(s1[1]^48)*2-opt1);
}
for(int i=1;i<=(n<<1);i++)
if (!dfn[i]) tarjan(i);
for(int i=1;i<=n;i++)
if (bel[2*i-1]==bel[2*i]) ans++;
if (!ans) printf("GOOD\n");
else printf("BAD\n");
}
return 0;
}
by 123456seh2 @ 2018-05-17 20:42:50
@温情 我后来把那个字符串读入改成逐字符就过了