#include <cstdio>
#include <cstring>
using namespace std;
#define LL long long
#define CL(a, val) memset(a, val, sizeof(a))
int n, p, q;
int b[5005];
int idx;
bool dfs(int u)
{
b[u] = -1;
int v = u - p;
if(v >= 0)
{
if(b[v] < 0)
return 0;
else if(!b[v] && !dfs(v))
return 0;
}
v = u + q;
if(v <= n)
{
if(b[v] < 0)
return 0;
else if(!b[v] && !dfs(v))
return 0;
}
b[u] = idx ++;
return 1;
}
bool topo()
{
CL(b, 0);
idx = 1;
for(int i = 0; i <= n; ++ i)
{
if(!b[i])
{
if(!dfs(i))
return false;
}
}
return true;
}
int main()
{
#if _MSC_VER == 1500
freopen("in.txt", "r", stdin);
freopen("out.txt", "w", stdout);
#endif
while(scanf("%d%d%d", &n, &p, &q) == 3)
{
if(!topo())
printf("NO\n");
else
{
printf("YES\n");
for(int i = 1; i <= n; ++ i)
{
if(i != 1)
printf(" ");
printf("%d", b[i] - b[i - 1]);
}
printf("\n");
}
}
return 0;
}
拓扑排序还能这么写 zoj 2997
最新推荐文章于 2020-08-19 19:06:06 发布