深搜WA on test 5求调
查看原帖
深搜WA on test 5求调
535729
Tu_es_trop_belle楼主2022/11/12 14:00
#include <iostream>
#include <vector>
#include <cstring>
#define reset(a, b) memset(a, b, sizeof(a))
#define endline putchar('\n')
using namespace std;
const int INF = 0x7f7f7f7f;
const int N = 1e5 + 17;
template<typename T>
inline void rd(T &x)
{bool b=0;char c=getchar();x=0;
while(!isdigit(c)){b|=(c=='-');c=getchar();}
while(isdigit(c)){x=(x<<3)+(x<<1)+(c^48);c=getchar();}
x=b?(-x):x;return;}
int stk[128], tp;
template<typename T>
inline void wte(T x)
{tp=0;if(x<0)putchar('-'),x=-x;
do stk[++tp]=x%10+'0';while(x/=10);
while(tp)putchar(stk[tp--]);}
int n, m, sign[N];
vector<int> g[N];
bool vis[N], ans[N] = { 0 };
vector<int> v;
void fun(int nw)
{
//	cout << nw << " ";
	v.push_back(nw);
	vis[nw] = 1;
	if (sign[nw] == 2)
	{
		for (auto i : v) ans[i] = 1;
		v.clear();
	}
	
	for (auto i : g[nw])
	{
		if (!vis[i] && sign[i] != 1)
		{
			fun(i);
			vis[i] = 0;
		}
	}
	return ;
}
signed main()
{
	rd(n), rd(m);
	for (int i = 1; i <= n; ++i)
		rd(sign[i]);
	while (m--)
	{
		int u, v;
		rd(u), rd(v);
		g[u].push_back(v);
	}
	for (int i = 1; i <= n; ++i)
	{
		if (sign[i] == 1)
		{
			v.clear();
			reset(vis, 0);
//			endline;
			fun(i);
		}
	}
	for (int i = 1; i <= n; ++i)
		wte(ans[i]), endline;
	return 0;
}

2022/11/12 14:00
加载中...