admin5站长网五个h5制作网站
admin5站长网,五个h5制作网站,网站开发免费维护一年,天津seo托管文章目录题意思路传送门
题意
给你nnn个点#xff0c;需要给每个点定向#xff0c;方向可以向右或者向左#xff0c;定向之后点会朝选择的方向移动#xff0c;要求满足mmm个条件#xff0c;两种不同的条件如下#xff1a; i,ji,ji,j两个位置定向之后移动不会相遇。i,ji…
文章目录题意思路传送门
题意
给你nnn个点需要给每个点定向方向可以向右或者向左定向之后点会朝选择的方向移动要求满足mmm个条件两种不同的条件如下
i,ji,ji,j两个位置定向之后移动不会相遇。i,ji,ji,j两个位置定向之后一定会相遇。
如果不能满足输出NONONO否则输出YESYESYES并且给出定向之后的点的方向和位置。
思路
考虑两种情况的方向如何选择首先他们两个位置一定选择不同的方向让后根据是否相遇来调整他们的位置。那么根据第一个条件我们给i,ji,ji,j连无向边那么有解的第一个条件就比较显然了就是这个构成的图是二分图让后现在他们的方向确定了接下来需要确认他们的位置我们分两种情况来讨论分别对应题目的两种情况
假设iii位置取LLLjjj位置取RRR由于他们不会相遇那么xixjx_ix_jxixj。假设iii位置取LLLjjj位置取RRR由于他们会相遇那么xixjx_ix_jxixj。
看到大于号需要跟拓扑序联系起来那么我们就按照从小到大的位置来填连边就按照上面的小的连大的最终判断是否存在环即可。
复杂度O(nm)O(nm)O(nm)
#includebits/stdc.h
#define X first
#define Y second
#define L (u1)
#define R (u1|1)
#define Mid (tr[u].ltr[u].r1)
#define pb push_back
using namespace std;const int N1000010,INF0x3f3f3f3f,mod1e97;
typedef long long LL;int n,m;
vectorintv[N];
bool flag;
int col[N],d[N];
int st[N];
struct Node {int x,y,z;
}p[N];
struct node {char ch;int pos;
}ans[N];void dfs(int u,int c) {col[u]c;st[u]0;for(auto x:v[u]) {if(col[x]) {if(col[x]c) flagfalse;continue;}dfs(x,3-c);}
}char get(int pos) {if(col[pos]0) return L;if(col[pos]1) return R;else return L;
}void solve() {flagtrue;scanf(%d%d,n,m);for(int i1;im;i) {int a,b,c; scanf(%d%d%d,a,b,c);v[b].pb(c);v[c].pb(b);p[i]{a,b,c};}for(int i1;in;i) if(!col[i]) dfs(i,1);if(!flag) {puts(NO);return;}for(int i1;in;i) v[i].clear();for(int i1;im;i) {int x,y,z;xp[i].x,yp[i].y,zp[i].z;if(x2) {if(col[y]1) d[z],v[y].pb(z);else d[y],v[z].pb(y);} else {if(col[y]2) d[z],v[y].pb(z);else d[y],v[z].pb(y);}}queueintq;int pos0;for(int i1;in;i) if(!d[i]) q.push(i);while(q.size()) {int uq.front(); q.pop();ans[u]{get(u),pos};for(auto x:v[u]) {if(--d[x]0) {q.push(x);}}}for(int i1;in;i) if(d[i]) {puts(NO);return;}puts(YES);for(int i1;in;i) {printf(%c %d\n,ans[i].ch,ans[i].pos);}
}int main() {int _1;while(_--) {solve();}return 0;
}
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/90567.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!