QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#816472 | #9812. Binary Search | rqoi031 | WA | 5ms | 18004kb | C++20 | 2.2kb | 2024-12-16 11:53:17 | 2024-12-16 11:53:19 |
Judging History
answer
#include<stdio.h>
#include<algorithm>
#include<cstring>
constexpr int inf{0x3f3f3f3f};
constexpr int N{300000};
struct edge {
int v,next;
};
edge e[(N<<1)+5];
int en,last[N+5];
inline void add_edge(const int &u,const int &v) {
e[++en]={v,last[u]},last[u]=en;
e[++en]={u,last[v]},last[v]=en;
}
int a[N+5];
int deg[N+5][4];
int dis[N+5][4];
int tmp[N+5][4];
int que[(N<<2)+5];
int main() {
int n,m;
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++) {
scanf("%d",a+i);
}
for(int i=1;i<=m;i++) {
int u,v;
scanf("%d%d",&u,&v);
add_edge(u,v);
}
int ans{inf};
for(int c=0;c!=4;c++) {
int val[4]{c&1,c>>1,c&1^1,(c>>1)^1};
std::memset(dis,0x3f,sizeof(dis));
std::memset(tmp,0,sizeof(tmp));
std::memset(deg,0,sizeof(deg));
for(int i=1;i<=n;i++) {
for(int j=0;j!=4;j++) {
if(a[i]==val[j+1&3]) {
for(int k=last[i];k;k=e[k].next) {
++deg[e[k].v][j];
}
}
}
}
int qb{1},qe{0};
for(int i=1;i<=n;i++) {
for(int j=0;j!=4;j++) {
if(deg[i][j]==0&&a[i]==val[j]) {
dis[i][j]=1;
que[++qe]=i<<2|j;
printf("> %d %d\n",i,j);
}
}
}
while(qb<=qe) {
int &_{que[qb++]};
int u{_>>2},t0{_&3},t1{t0-1&3};
for(int i=last[u];i;i=e[i].next) {
int &v{e[i].v};
if(a[v]!=val[t1]) {
continue;
}
tmp[v][t1]=std::max(tmp[v][t1],dis[u][t0]+1);
if(!--deg[v][t1]) {
dis[v][t1]=tmp[v][t1];
que[++qe]=v<<2|t1;
}
}
}
int len{0};
for(int i=1;i<=n;i++) {
if(a[i]==val[0]) {
len=std::max(len,dis[i][0]);
}
}
ans=std::min(ans,len);
}
if(ans>=inf) {
puts("infinity");
}
else {
printf("%d\n",ans+1);
}
return 0;
}
详细
Test #1:
score: 0
Wrong Answer
time: 5ms
memory: 18004kb
input:
4 4 0 0 1 1 1 2 1 3 2 3 3 4
output:
> 4 3 > 4 0 > 4 2 > 4 1 4
result:
wrong answer 1st lines differ - expected: '4', found: '> 4 3'