| # | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
|---|---|---|---|---|---|---|---|
| 1324747 | yifanzzz | 새로운 문제 (POI13_mor) | C++20 | 1461 ms | 26784 KiB |
#include <iostream>
#include <vector>
#include <queue>
#include <algorithm>
using namespace std;
vector<int>adj[5001];
vector<int> d(10002,-1);
vector<int> ptern(5001,-1);
vector<int> ans(1000001);
vector<pair<pair<int,int>,int> >st[5001];
int n,m,k;
void bfsm(int nd){ //just to mark the patterns
queue<int> q;
while(!q.empty())q.pop();
q.push(nd);
ptern[nd]=0;
while(!q.empty()){
int t=q.front(); q.pop();
for(int u:adj[t]){
if(ptern[u]==-1) q.push(u);
ptern[u]=(ptern[t]+1)%2;
}
}
}
void bfsr(int nd){ //the real bfs; dnorm and dfl
queue<int> q;
while(!q.empty())q.pop();
q.push(nd);
d[nd]=0;
while(!q.empty()){
int t=q.front(); q.pop();
if(t<=n){ //under
for(int u:adj[t]){
if(d[u]==-1){
d[u]=d[t]+1;
q.push(u);
} else if ((d[u]%2)==(d[t]%2)){
d[u+n]=d[t]+1;
q.push(u+n);
}
}
} else { //above
for(int u:adj[t]){
if(d[u]==-1){
if((ptern[u]-n+1)%2==(d[t]+1)%2){
d[u]=d[t]+1;
q.push(u);
}
}
}
}
}
}
int main(){
cin >> n >> m >> k;
for(int i=1; i<=m; i++) {
int a,b; cin >> a >> b;
adj[a].push_back(b);
adj[b].push_back(a);
}
for(int i=1; i<=k; i++) {
int a,b,c; cin >> a >> b >> c;
st[a].push_back(make_pair(make_pair(b,c),i));
}
int p=0;
for(int i=1; i<=n; i++) {
for(int j=1; j<=n; j++) {
d[j]=-1;
d[j+n]=-1;
ptern[j]=-1;
}
bfsm(i);
bfsr(i);
// cout << i << endl;
// for(int i=1; i<=n; i++) {
// cout << ptern[i] << " ";
// }
// cout << endl;
// for(int i=1; i<=n; i++) {
// cout << d[i] << " ";
// }
// cout << endl;
for(auto u:st[i]){
int dis=d[u.first.first];
if(dis==-1){
ans[u.second]=0;
// cout << "NIE1" << endl;
} else if((dis%2)!=(u.first.second%2)) {
dis=d[u.first.first+n];
if(dis==-1) {
ans[u.second]=0;
// cout << "NIE2" << endl;
} else {
if(u.first.second<dis){
ans[u.second]=0;
// cout << "NIE3" << endl;
} else {
ans[u.second]=1;
// cout << "TAK1" << endl;
}
}
} else {
if(u.first.second<dis){
ans[u.second]=0;
// cout << "NIE4" << endl;
} else {
ans[u.second]=1;
// cout << "TAK2" << endl;
}
}
}
}
for(int i=1; i<=k; i++) {
if(ans[i]==1){
cout << "TAK" << endl;
} else {
cout << "NIE" << endl;
}
}
}| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
| # | Verdict | Execution time | Memory | Grader output |
|---|---|---|---|---|
| Fetching results... | ||||
