QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#692790 | #5520. Distance Parities | didu | RE | 0ms | 0kb | C++14 | 3.1kb | 2024-10-31 15:03:03 | 2024-10-31 15:03:05 |
answer
/*#include<bits/stdc++.h>
#define pb push_back
#define fir first
#define sec second
#define ll long long
using namespace std;
const int MAXN = 5e2+10;
const int INF = 1e9+10;
int n,vis[MAXN],dis[MAXN];
int a[MAXN][MAXN],edg[MAXN][MAXN];//邻接矩阵
int main(){
freopen("bridge.in","r",stdin);
freopen("bridge.out","w",stdout);
int Tc;cin >> Tc;
while(Tc--){
cin >> n;
for(int i = 1;i <= n;i++) for(int j = 1;j <= n;j++){
char x; cin >> x; a[i][j] = ( x == '1' ); edg[i][j] = 0;
}
for(int i = 1;i <= n;i++) vis[i] = 0;
vector< pair<int,int> > ans;
for(int i = 1;i <= n;i++){
for(int j = i+1;j <= n;j++){
if(a[i][j]){
//cout << i << " " << j << endl;
vis[j] = 1; ans.push_back(make_pair(i,j));
edg[i][j] = edg[j][i] = 1;
}
}
}
bool fl = 1;
for(int s = 1;s <= n && fl;s++){
for(int i = 1;i <= n;i++) dis[i] = INF;
dis[s] = 0; queue<int> q;q.push(s);
while(!q.empty()){
int u = q.front(); q.pop();
//cout << u << " " << dis[u] << endl;
for(int v = 1;v <= n;v++){
if(!edg[u][v]) continue;
if(dis[v] == INF) dis[v] = dis[u]+1,q.push(v);
}
}for(int i = 1;i <= n && fl;i++) if(dis[i] == INF || (dis[i]&1) != (a[s][i]&1) ){
printf("Track Lost\n"); fl = 0;
}
}
if(!fl) continue;
printf("Pure Memory\n%d\n",(int)ans.size());
for(int i = 0;i < ans.size();i++) cout << ans[i].fir << " " << ans[i].sec << endl;
} return 0;
}*/
#include<bits/stdc++.h>
#define mkp make_pair
#define fir first
#define sec second
#define ll long long
#define pb push_back
using namespace std;
const int INF = 1e9;
const int MAXN = 500+10;
int a[MAXN][MAXN],n,cnt;
int dis[MAXN][MAXN];
vector<int> vct[MAXN];
pair<int,int> ans[MAXN*MAXN];
void bfs(int s){
for(int i = 1;i <= n;i++) dis[s][i] = INF;
queue<int> q; dis[s][s] = 0; q.push(s);
while(!q.empty()){
int u = q.front(); q.pop();
for(int v: vct[u]){
if(dis[s][v] == INF)dis[s][v] = dis[s][u]+1,q.push(v);
}
}return ;
}
void init(){ for(int i = 1;i <= n;i++) vct[i].clear(); cnt = 0; return ;}
char str[MAXN][MAXN];
int main(){
freopen("bridge.in","r",stdin);
freopen("bridge.out","w",stdout);
int Tc;scanf("%d",&Tc);
while(Tc--){
scanf("%d",&n); init(); bool fl = 1;
for(int i = 1;i <= n;i++){
scanf("%s",(str[i]+1));
for(int j = 1;j <= n;j++){
a[i][j] = (int)(str[i][j]-'0');
if(a[i][j] == 1) vct[i].pb(j);
if(i > j){
ans[++cnt] = mkp(i,j);
if( (a[i][j] && !a[j][i]) || (!a[i][j] && a[j][i]) ) fl = 0;
}
}
}
if(!fl){ printf("Track Lost\n"); continue; }
for(int i = 1;i <= n;i++) bfs(i);
for(int i = 1;i <= n && fl;i++){
for(int j = 1;j <= n && fl;j++){
if(i == j && a[i][j] == 1)fl = 0;
if(dis[i][j] == INF) fl = 0;
if( ((dis[i][j] & 1) && a[i][j] != 1) || (!(dis[i][j] & 1) && a[i][j] != 0) )fl = 0;
}
}
if(!fl){ printf("Track Lost\n"); continue; }
printf("Pure Memory\n");
printf("%d\n",cnt);
for(int i = 1;i <= cnt;i++) printf("%d %d\n",ans[i].fir,ans[i].sec);
} return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Dangerous Syscalls
input:
3 3 011 101 110 4 0100 1000 0001 0010 5 01010 10101 01010 10101 01010