bzoj 3706 反色刷 | 一笔画
2015-11-16 10:39
274 查看
首先,对于一个连通子图,如果存在一个方案把所有边都变成白色,这个方案一定可以只经过黑边。然后对于每一个子图,就是小时候玩的一笔画了。一个一笔画存在回到原点的方案当且仅当所有点的度数都是偶数,这样就可以判定可行性,如果可行,答案就是有黑边的极大连通子图个数。
#include<cstdio> #include<cstdlib> #include<cstring> #include<algorithm> #include<cmath> #define md #define ll long long #define inf (int) 1e9 #define eps 1e-8 #define N 1000010 using namespace std; struct yts { int x,t,l,ne;} e[2*N]; int vis ,pos ,v ,sum ,bl ; int tot=0,num=1; void put(int x,int y,int l) { num++; e[num].x=x; e[num].t=y; e[num].l=l; e[num].ne=v[x]; v[x]=num; } void dfs(int x) { vis[x]=1; pos[x]=tot; for (int i=v[x];i;i=e[i].ne) { int y=e[i].t; if (!vis[y]) dfs(y); } sum[tot]+=bl[x]; } int main() { num=1; int n,m,x,y,z; scanf("%d%d",&n,&m); for (int i=1;i<=m;i++) { scanf("%d%d%d",&x,&y,&z); put(x,y,z); put(y,x,z); if (z==1) { bl[x]++; bl[y]++;} } for (int i=1;i<=n;i++) if (!vis[i]) { tot++; dfs(i); } int ans,ok,tt; ans=0; for (int i=1;i<=tot;i++) ans+=sum[i]>0; ok=0; for (int i=1;i<=n;i++) if (bl[x]&1) ok++; scanf("%d",&tt); for (int i=1;i<=tt;i++) { int opt,p; scanf("%d",&opt); if (opt==1) { scanf("%d",&p); p++; int x=e[p<<1].x,y=e[p<<1].t; if (e[p<<1].l==1) { if (bl[x]&1) ok--; if (bl[y]&1) ok--; bl[x]--; bl[y]--; if (bl[x]&1) ok++; if (bl[y]&1) ok++; if (sum[pos[x]]>0) ans--; sum[pos[x]]--; sum[pos[y]]--; if (sum[pos[x]]>0) ans++; e[p<<1].l=0; e[(p<<1)|1].l=0; } else { if (bl[x]&1) ok--; if (bl[y]&1) ok--; bl[x]++; bl[y]++; if (bl[x]&1) ok++; if (bl[y]&1) ok++; if (sum[pos[x]]>0) ans--; sum[pos[x]]++; sum[pos[y]]++; if (sum[pos[x]]>0) ans++; e[p<<1].l=1; e[(p<<1)|1].l=1; } } else { if (ok) printf("-1\n"); else printf("%d\n",ans); } } return 0; }
相关文章推荐
- bzoj 3108 图的逆变换
- bzoj 2660 最多的方案 | 斐波那契数列
- bzoj 1187 神奇的游乐园 | 插头dp
- bzoj 2173 整数的lqp拆分 | dp | 找规律
- poj 2411| 插头dp
- bzoj 2660 最多的方案 | dp
- bzoj 3170 松鼠聚会 | 旋转坐标
- bzoj 1537 bus|cdq分治
- bzoj 2257 瓶子和燃料
- bzoj 3398 牡牛和牝牛
- bzoj 3534 重建
- bzoj 4017 小Q的无敌异或
- bzoj 1002 轮状病毒
- bzoj 3288 矩阵
- bzoj 4031 小z的房间
- bzoj 4004 装备购买
- 容斥原理
- 主席树&树状数组套主席树
- bzoj 3589 动态树
- bzoj 3622 已经没有什么好害怕的了