集训day1 p1

来源:互联网 发布:淘宝投诉盗图入口 编辑:程序博客网 时间:2024/04/30 00:45



















二分图

貌似还有并查集  by wxr 改编自hnoi



#include <cstdio>#include <cstring>#include <iostream>#define D 5010using namespace std;typedef pair<int,int> pii;int pr[D],ptot,n,q,u,v,cnt,tim,col[D],abandoned[D];int hash[D];pii sav[D];struct edge {int v,next;}e[1000000];int head[D];int read () {char c = getchar();int re = 0;while(c > '9' || c < '0')c = getchar();while(c <= '9' && c >= '0') {re = re * 10 + c - '0';c = getchar();}return re;}void adde (int u,int v) {e[++cnt].v = v;e[cnt].next = head[u];head[u] = cnt;e[++cnt].v = u;e[cnt].next = head[v];head[v] = cnt;}void reverse (int U,int ti) {if(hash[U] == ti)return;col[U] ^= 1;hash[U] = ti;for(int i = head[U];i != -1;i = e[i].next) {int V = e[i].v;if(!abandoned[V])reverse(V,ti);}}int main () {freopen("traf.in","r",stdin);freopen("traf.out","w",stdout);memset(head,-1,sizeof head);n = read();q = read();for(int i = 1;i <= q;++i) {u = read();v = read();if(u > v) {int t = u;u = v;v = t;}sav[i].first = u;sav[i].second = v;}for(int i = 1;i <= q;i++) {for(int j = 1;j <= i - 1;++j) {if(!abandoned[j]) {if((((sav[j].first > sav[i].first) && (sav[j].first < sav[i].second)) && sav[j].second > sav[i].second)||(sav[j].first < sav[i].first && ((sav[j].second > sav[i].first) && sav[j].second < sav[i].second))) {if(col[i] != col[j] ^ 1) {reverse(i,++tim);if(col[i] != col[j] ^ 1) {abandoned[i] = 1;pr[++ptot] = i;break;}else adde(i,j);}else adde(i,j);}}}}printf("%d\n",ptot);for(int i = 1;i <= ptot;i++)printf("%d\n",pr[i]);return 0;}



0 0
原创粉丝点击