QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#651277 | #7503. Too Many Edges | ucup-team5071# | RE | 0ms | 3540kb | C++20 | 1.8kb | 2024-10-18 17:34:20 | 2024-10-18 17:34:21 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
const int maxn=5e4+10;
vector<pair<int,int>>ve[maxn];
map<pair<int,int>,int>ma;
int query(int x,int y){
if(ma.find({x,y})!=ma.end())return ma[{x,y}];
cout<<"?"<<" "<<x<<" "<<y<<endl;
int z;cin>>z;
ma[{x,y}]=z;
return z;
}
void answer(int x){
cout<<"! "<<x<<endl;
exit(0);
}
int gmax(int &x,int y){
if(y>x){x=y;return 1;}
return 0;
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
int n,m;cin>>n>>m;
for(int i=1;i<=m;i++){
int x,y;cin>>x>>y;
ve[x].emplace_back(y,i);
}
vector<int> ok(n+1);
bool flag=true;
while(flag){
vector<int> in(n+1);
for(int i=1;i<=n;i++){
for(auto [to,t]:ve[i])if(ok[t]!=-1){
in[to]++;
}
}
queue<int> qu;
vector<int> dp(n+1);
for(int i=1;i<=n;i++)if(!in[i])qu.push(i);
vector<int> pr(n+1),edge(n+1);
while(!qu.empty()){
int x=qu.front();qu.pop();
for(auto [to,t]:ve[x])if(ok[t]!=-1){
if(gmax(dp[to],dp[x]+1))pr[to]=x,edge[to]=t;
if((--in[to])==0)qu.push(to);
}
}
int mx=1;
for(int i=1;i<=n;i++)if(dp[i]>dp[mx])mx=i;
vector<tuple<int,int,int>> v;
for(int t=1,now=mx;t<=dp[mx];t++){
v.emplace_back(pr[now],now,edge[now]);
now=pr[now];
}
reverse(v.begin(),v.end());
flag=false;
for(auto [x,y,id]:v){
if(!query(x,y)){
flag=true;
ok[id]=-1;
}
else ok[id]=1;
}
if(!flag)answer(dp[mx]);
}
}
/*
5 5
1 2
1 3
2 5
3 4
4 5
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 0ms
memory: 3540kb
input:
5 5 1 2 1 3 2 5 3 4 4 5 1 0 1 1 1
output:
? 1 3 ? 3 4 ? 4 5 ? 1 2 ? 2 5 ! 2
result:
ok Correct answer
Test #2:
score: -100
Runtime Error
input:
230 470 212 98 107 123 116 72 158 83 135 111 78 123 221 217 214 203 28 221 229 3 111 127 128 13 125 116 180 78 175 191 182 99 194 6 12 83 209 29 169 129 192 208 145 38 33 86 104 85 145 82 38 82 193 153 109 41 199 194 89 72 161 227 36 177 13 141 173 110 212 77 155 81 87 82 104 172 148 182 170 222 68 ...
output:
? 147 145 ? 145 53 ? 53 178 ? 178 223 ? 223 101 ? 101 195 ? 195 38 ? 38 81 ? 81 207 ? 207 87 ? 87 82 ? 82 137 ? 137 196 ? 196 15 ? 15 113 ? 113 20 ? 20 40 ? 40 227 ? 227 224 ? 224 56 ? 56 175 ? 175 167 ? 167 176 ? 176 211 ? 211 112 ? 112 62 ? 62 135 ? 135 198 ? 198 201 ? 201 131 ? 131 191 ? 191 205 ...