这个题嘛ans = 2 * ans + 1
#include "stdafx.h"
#pragma warning(disable : 4996)
#include<cstdio>
#include<iostream>
using namespace std;
int n, m;
int a, b;
const int MAXN = 200000 + 7;
int fa[MAXN], noderank[MAXN];
const int mod = 1000000009;
void union_find_init(int v)
{
for (int i = 1; i <= v; i++)
{
fa[i] = i;
noderank[i] = 0;
}
}
int find(int x)
{
return x == fa[x] ? x : fa[x] = find(fa[x]);
}
void unite(int x, int y)
{
x = find(x);
y = find(y);
if (x == y) return;
if (noderank[x] < noderank[y]) fa[x] = y;
else
{
fa[y] = x;
if (noderank[x] == noderank[y]) noderank[x] ++;
}
}
bool same(int x, int y)
{
return find(x) == find(y);
}
int ans = 0;
int main()
{
scanf("%d", &n);
union_find_init(n);
scanf("%d", &m);
while (m --)
{
scanf("%d %d", &a, &b);
if (same(a, b)) ans = ((ans * 2) % mod + 1) % mod;
printf("%d\n",ans % mod);
unite(a, b);
}
return 0;
}
还有就是某越超神的ans = ((ans * 2) % mod + 1) % mod
没有它会wa7个点。
我也不知道为啥直接%mod会wa。(。。。)
还有,cin、cout会超时的!!!!!!!!