题意:给个n个点 m条边的图 每个点有个权值c 范围(0,2^k-1) 如果边的两个定点的权值不同 那么他们的连接就是安全的 现在有一个病毒 他的值x 在上述范围内随机 存在一个集合
思路 :攻击后连接不安全的 条件是 a^x==b^x 则有 a^b==x 符合这个条件的a b要么同时在点集内 要么同时不在 可以把每条边的a^b算出来 x相同的边要么同时在一个集合要么同时不在 以此为依据就能用组合数学的思想算出答案
其中pow的使用要尤为注意 需要自己写一个Pow每次结果%MOD才不会溢出
参考了:https://www.cnblogs.com/DeaphetS/p/9599587.html 的文章
下面引用自上述文章
#include
using namespace std;
typedef long long ll;
const ll MOD=(1e9)+7;
ll liantong;
ll n,m,k;
struct Node{
ll u,v,x;
}a[500000+10];
ll fa[500000+10];
ll c[500000+10];
sets;
bool cmp(Node a,Node b){
return a.x