1 /*记录无向图的边数*/
2 #include <iostream>
3 #include <cstdio>
4 #include <cstring>
5 #define MAX 100010
6 using namespace std;
7 int SEX[100010]; //性别
8 typedef struct edge
9 {
10 int TO; //下一个顶点
11 int Next; //记录下一条边的编号
12 int Vlaue; //权值
13 }EDGE;
14 EDGE ID[3*MAX]; //边表,坑爹的边数,记得弄多点,不然有时候也会提示超时。
15 int First[MAX]; //First[x]:x表示头结点为x,First[x]表示下一条边的编号
16 int SIGN;
17 long long sum;
18 void Add_E(int x,int y,int z) //添加边
19 {
20 ID[SIGN].TO=y;
21 ID[SIGN].Vlaue=z;
22 ID[SIGN].Next=First[x];
23 First[x]=SIGN++;
24 }
25
26 void C_SEX()
27 {
28 int n,i;
29 scanf("%d",&n);
30 SEX[n]=1-SEX[n]; //改变性别
31 for(i=First[n];i!=0;i=ID[i].Next) //查找与该点相关的点
32 {
33 if(SEX[ID[i].TO]==SEX[n]) //与修改后的性别一样,
34 { //说明之前是加上该点的权值,
35 sum-=ID[i].Vlaue; //减去该点的权值
36 }
37 else
38 { //与修改后的性别不一样
39 sum+=ID[i].Vlaue; //说明之前是没有加上该点的权值,
40 } //现在就加上该点的权值
41 }
42 return ;
43 }
44 void C_Map()
45 {
46 int x, y, z,i,Begin=0;
47 scanf("%d %d %d",&x,&y,&z);
48 for(i=First[x];i!=0;i=ID[i].Next)//查找是否已经存在的关系
49 {
50 if(ID[i].TO==y)//存在关系
51 {
52 Begin=ID[i].Vlaue;
53 ID[i].Vlaue=z;
54 break;
55 }
56 }
57 if(i!=0)
58 {
59 for(i=First[y];i!=0;i=ID[i].Next)//查找是否已经存在的关系
60 {
61 if(ID[i].TO==x)//存在关系
62 {
63 ID[i].Vlaue=z;
64 break;
65 }
66 }
67 }
68 else if(i==0)//如果没有存在关系,创建两个点
69 {
70 Add_E(x,y,z);
71 Add_E(y,x,z);
72 }
73 if(SEX[x]!=SEX[y])//如果性别不一样,减去之前权值,加上当前的权值
74 sum+=(z-Begin);
75
76 return ;
77 }
78
79 void FIND()//输出答案
80 {
81 printf("%lld\n",sum);
82 return ;
83 }
84 void work()
85 {
86 int N;
87 scanf("%d",&N);
88 switch(N)
89 {
90 case 1:C_SEX();break;
91 case 2:C_Map();break;
92 case 3:FIND();break;
93 }
94 return ;
95 }
96 int main()
97 {
98 int T,i,t;
99 int N,M,Q;
100 int x,y,z;
101 scanf("%d",&T);
102 t=1;
103 while(T--)
104 {
105 scanf("%d %d %d",&N,&M,&Q);
106 SIGN=1;sum=0;
107 for(i=1;i<=N;i++)
108 {
109 scanf("%d",&SEX[i]);
110 First[i]=0;
111 }
112 for(i=1;i<=M;i++)
113 {
114 scanf("%d %d %d",&x,&y,&z);
115 Add_E(x,y,z);
116 Add_E(y,x,z);
117 if(SEX[x]!=SEX[y])sum+=z; //判断性别不一样相加
118 }
119 printf("Case #%d:\n",t++);
120 while(Q--)
121 {
122 work();
123 }
124 }
125 return 0;
126 }