I - Tree Gym - 104385I(基础操作性质)

这题呢,就是知道异或的性质就可以了

一:

相同为0,不同为1,即

1 ^ 1 = 0

0 ^ 0 = 0

1 ^ 0 = 1

二:

(1)交换律: A ^ B = B ^ A

(2)结合律: ( A ^ B ) ^ C = A ^ ( B ^ C )

(3)自反性: A ^ B ^ B = A (由结合律可推: A ^ B ^ B = A ^ ( B ^ B ) = A ^ 0 = A)

(本题就是用的这个性质,对于操作一除了开头与结尾异或一次,其余异或两次,故不变,所以直接维护点就可以了)

#include
using namespace std;
const int N=1e6+10; 
#define int long long
int g[N];
int n,q;
int u,v,w;
int a,b,c;
signed main()
{
  std::ios::sync_with_stdio(false);cin.tie(0); cout.tie(0);
  cin>>n>>q;
  for(int i=1;i>u>>v>>w;
    g[u]^=w;
    g[v]^=w;
  }
  while(q--)
  {
    int op;
    cin>>op;
    if(op==1)
    {
      cin>>a>>b>>c;
      g[a]^=c,g[b]^=c;
    }
    else 
    {
     cin>>a;
    cout<

其他操作性质

按位或运算符(|)(有1为1,全0则0)

运算规则:0|0=0;  0|1=1;  1|0=1;   1|1=1;

即 :参加运算的两个对象只要有一个为1,其值为1。

例如:3|5 即 00000011 | 0000 0101 = 00000111  因此,3|5的值得7。 

按位与运算符(&)(有0为0,全1则1)

参加运算的两个数据,按二进制位进行“与”运算。

运算规则:0&0=0;  0&1=0;   1&0=0;    1&1=1;

 即:两位同时为“1”,结果才为“1”,否则为0

例如:3&5  即 0000 0011& 0000 0101 = 00000001  因此,3&5的值得1。
 

你可能感兴趣的:(c++,开发语言)