QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#565941#9319. Bull FarmWolamWA 95ms9948kbC++142.8kb2024-09-15 22:40:552024-09-15 22:40:55

Judging History

你现在查看的是最新测评结果

  • [2024-09-15 22:40:55]
  • 评测
  • 测评结果:WA
  • 用时:95ms
  • 内存:9948kb
  • [2024-09-15 22:40:55]
  • 提交

answer

#include<bits/stdc++.h>

using namespace std;

const int N=2005;

int n,m,q;

int fa[N];

int t[N][N];
bool vis[N][N];


bool ans[1000005];

struct ss{

	int a,b,c,id;

	bool operator <(const ss ot)const{

		return c<ot.c;

	}

}Q[1000005];


vector<int> g[2005],G[2005];

int find(int x)

{

	if(x==fa[x])return x;

	return fa[x]=find(fa[x]);

}

bool merge(int x,int y)

{

	x=find(x);y=find(y);

	if(x==y)return 1;

	fa[x]=y;

	return 0;

}

vector<int> e[N];
set<int> s;
void upd(int *t)

{

	for(int i=1;i<=n;i++)

		e[i].clear();

	for(int i=1;i<=n;i++)

	{

		e[t[i]].push_back(i);

	}

	int mx=0,sum=0,mi=0;

	for(int i=1;i<=n;i++)

	{

		if(e[i].size())

		{

			sum++;

			if(e[i].size()>1)

				mx=i;

		}

		else mi=i;

	}

	if(sum==n-1)

	{

		G[mi].push_back(e[mx][0]);

		G[mi].push_back(e[mx][1]);

	}

	else if(!mx)

	{

		for(int i=1;i<=n;i++)

			merge(i,t[i]);

	}

	for(int i=1;i<=n;i++)

		g[i].clear();

	for(int i=1;i<=n;i++)

	{

		int x=find(i);

		for(auto j:G[i])

		{

			int y=find(j);

			//cerr<<x<<" "<<y<<endl;

			if(x!=y)g[x].push_back(y);

		}

	}

}

bool bfs(int s,int t,bool *vis)

{

	for(int i=1;i<=n;i++)

		vis[i]=0;

	s=find(s);t=find(t);

	queue<int> q;

	q.push(s);

	vis[s]=1;

	while(!q.empty())

	{

		int x=q.front();q.pop();

		for(auto y:g[x])

		{

			if(!vis[y])

			{

				q.push(y);

				vis[y]=1;

			}

		}

	}
    
	return vis[t];

}

void sol()

{

	cin>>n>>m>>q;
    for(int i=1;i<=q;i++)
        ans[i]=0;

	for(int i=1;i<=n;i++)fa[i]=i,G[i].clear(),g[i].clear();
	for(int i=1;i<=m;i++)

	{

		char a,b;

		for(int j=1;j<=n;j++)

		{

			cin>>a>>b;

			int x=(a-'0')*50+b-'0';

			t[i][j]=x;

		}

	}

	for(int i=1;i<=q;i++)

	{

		char a,b;

		cin>>a>>b;

		Q[i].a=(a-'0')*50+b-'0';

		//cerr<<Q[i].a<<endl;

		cin>>a>>b;

		Q[i].b=(a-'0')*50+b-'0';

		cin>>a>>b;

		Q[i].c=(a-'0')*50+b-'0';

		Q[i].id=i;

	}

	sort(Q+1,Q+q+1);

	int now=1;
    s.clear();
	for(int i=1;i<=q;i++)

	{

		while(now<=Q[i].c)

		{

		//	cerr<<now<<endl;

			upd(t[now]);

			now++;

            s.clear();

		}
        if(s.count(find(Q[i].b)))
        {
		    ans[Q[i].id]=vis[find(Q[i].b)][Q[i].id];
        }
        else
        {
            s.insert(find(Q[i].b));
		    ans[Q[i].id]=bfs(Q[i].b,Q[i].a,vis[find(Q[i].b)]);
        }
	}

	for(int i=1;i<=q;i++)

		cout<<ans[i];

	cout<<'\n';

}

int main(){

	ios::sync_with_stdio(0);

	cin.tie(0);cout.tie(0);

//	char a,b;

//	for(char c=48;c<=98;c++)

//		cerr<<c<<endl;

//	cin>>a>>b;

	int t;

	for(cin>>t;t;t--){

		sol();

	}

	return 0;

}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 7824kb

input:

2
5 2 4
0305040201
0404040404
030300
020500
050102
020501
6 2 4
030603010601
010203060504
030202
060402
050602
060401

output:

1011
0100

result:

ok 2 lines

Test #2:

score: 0
Accepted
time: 0ms
memory: 9948kb

input:

1
3 3 6
020202
030301
030201
020102
030203
010201
010303
020303
010202

output:

010101

result:

ok single line: '010101'

Test #3:

score: -100
Wrong Answer
time: 95ms
memory: 9856kb

input:

200
10 10 5000
01060:04020305080709
0103070:060204050908
09070503080401060:02
050308010204090:0607
03010502040607080:09
03080109020504060:07
06050:09040302080107
07080305010409060:02
030809010:0204060507
0:060908070201050304
060700
090:03
09080:
070405
010703
0:0100
080601
030600
070206
0:0:09
08040...

output:

000000000100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000...

result:

wrong answer 1st lines differ - expected: '011110001101101111111111111111...1111111111111111101111111111111', found: '000000000100000000000000000000...0000000000000000000000000000000'