QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#508919 | #8029. Traveling Merchant | FugiPig | WA | 0ms | 29904kb | C++14 | 2.9kb | 2024-08-07 21:55:39 | 2024-08-07 21:55:39 |
Judging History
answer
#include<iostream>
#include<vector>
#define ls ch[x][0]
#define rs ch[x][1]
#define rep(i,l,r) for(int i=(l);i<=(r);i++)
#define per(i,l,r) for(int i=(l);i>=(r);i--)
using namespace std;
const int maxn=2e5+5,inf=0x3f3f3f3f;
vector<int> G[maxn],G2[maxn],T[maxn<<1];
int mp[maxn],low[maxn],bel[maxn],st[maxn],dfn[maxn],jum[maxn<<1][25],dep[maxn<<1],tot,scc,top,in,im;
void tarjan(int cur,int fa)
{
//if(!fa&&G2[cur].empty())cout<<"ls"<<endl;
low[cur]=dfn[cur]=++tot;
st[++top]=cur;
int cnt=0;
rep(v1,0,int(G2[cur].size())-1){
int v=G2[cur][v1];
if(!dfn[v]){
tarjan(v,cur);
low[cur]=min(low[cur],low[v]);
if(low[v]>=dfn[cur]){
cnt++;
T[++scc].clear();
if(fa||cnt>1){
if(bel[cur]&&bel[cur]!=cur){
T[cur].push_back(bel[cur]);
T[bel[cur]].push_back(cur);
}
bel[cur]=cur;
T[cur].push_back(scc);
T[scc].push_back(cur);
}
else bel[cur]=scc;
for(int x=0;x!=v;top--){
x=st[top];
if(bel[x]==x){
T[scc].push_back(x);
T[x].push_back(scc);
}
bel[x]=scc;
}
}
}
else low[cur]=min(low[cur],dfn[v]);
}
}
void dfs(int cur,int fa){
dep[cur]=dep[fa]+1;
jum[cur][0]=fa;
rep(v1,1,20)jum[cur][v1]=jum[jum[cur][v1-1]][v1-1];
for(int v1=0;v1<T[cur].size();v1++){
int v=T[cur][v1];
if(v!=fa)dfs(v,cur);
}
}
int lca(int x,int y){
if(dep[x]<dep[y])swap(x,y);
per(v1,20,0)if(dep[jum[x][v1]]>=dep[y])x=jum[x][v1];
if(x==y)return x;
per(v1,20,0)if(jum[x][v1]!=jum[y][v1]){
x=jum[x][v1];
y=jum[y][v1];
}
return jum[x][0];
}
int main()
{
//freopen("travel.in","r",stdin);
//freopen("travel.out","w",stdout);
int it,cnt=0;
cin>>it;
while(it--)
{
cnt++;
scanf("%d %d",&in,&im);
rep(v1,1,in){
G[v1].clear();
G2[v1].clear();
T[v1].clear();
dfn[v1]=low[v1]=bel[v1]=0;
}
tot=top=0;
scc=in;
char c=getchar();
while(c<'A'||c>'Z')c=getchar();
rep(v1,1,in){
mp[v1]=(c=='H');
c=getchar();
}
rep(v1,1,im){
int ix,iy;
scanf("%d %d",&ix,&iy);
if(mp[ix]==mp[iy]){
G[ix].push_back(iy);
G[iy].push_back(ix);
}
else{
G2[ix].push_back(iy);
G2[iy].push_back(ix);
}
}
//cout<<"zs"<<endl;
tarjan(1,0);
dfs(bel[1],0);
//cout<<"zs"<<endl;
bool flag=false;
rep(v1,1,in){
if(!dfn[v1])continue;
for(int v2=0;v2<G[v1].size();v2++){
int to=G[v1][v2];
if(!dfn[to])continue;
int lc=lca(bel[v1],bel[to]);
// if(cnt==23){
// int t=bel[v1];
// cout<<in<<'-'<<im<<' '<<v1<<' '<<to<<' '<<bel[v1]<<' '<<bel[to]<<endl;
// while(jum[t][0])cout<<(t=jum[t][0])<<' ';
// cout<<endl;
// t=bel[to];
// while(jum[t][0])cout<<(t=jum[t][0])<<' ';
// cout<<endl;
// }
if(lc==bel[to]||lc==bel[v1]){
flag=true;
break;
}
}
if(flag)break;
}
if(flag)printf("yes\n");
else printf("no\n");
//if(cnt==23)break;
}
return 0;
}
詳細信息
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 29904kb
input:
2 4 4 LHLH 0 1 1 2 1 3 2 3 3 3 LHH 0 1 0 2 1 2
output:
yes yes
result:
wrong answer 2nd lines differ - expected: 'no', found: 'yes'