fork download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.io.*;
  6.  
  7. /* Name of the class has to be "Main" only if the class is public. */
  8. class F
  9. {
  10.  
  11. int[] P;
  12. int[][] D;
  13. ArrayList<Integer>[] adj;
  14. boolean[] Used;
  15.  
  16. public static void main(String[] args)throws java.lang.Exception{
  17. PrintWriter out = new PrintWriter(System.out,true);
  18. StringTokenizer st = new StringTokenizer(br.readLine());
  19. int n = Integer.parseInt(st.nextToken());
  20. int m = Integer.parseInt(st.nextToken());
  21. int z = Integer.parseInt(st.nextToken());
  22. F f = new F();
  23. f.P = new int[n+1];
  24. f.Used = new boolean[n+1];
  25. st = new StringTokenizer(br.readLine());
  26. for(int i =1;i<=n;i++)f.P[i] = Integer.parseInt(st.nextToken());
  27. f.D = new int[n+1][2];
  28. f.adj = new ArrayList[n+1];
  29. for(int i =0;i<=n;i++)f.adj[i] = new ArrayList<Integer>();
  30. for(int i =0;i<m;i++){
  31. st = new StringTokenizer(br.readLine());
  32. int x = Integer.parseInt(st.nextToken());
  33. int y = Integer.parseInt(st.nextToken());
  34. f.adj[x].add(y);
  35. f.adj[y].add(x);
  36. f.D[i+1][0] = x;
  37. f.D[i+1][1] = y;
  38. }
  39. // out.println(f.adj[1].size()+" "+f.adj[2].size()+" "f.adj[3].size());
  40. while(z-->0){
  41. long ans = 0,l = 0;
  42. Arrays.fill(f.Used,false);
  43. st = new StringTokenizer(br.readLine());
  44. String s = st.nextToken();
  45. if(s.equals("P")){
  46. int x = Integer.parseInt(st.nextToken());
  47. int y = Integer.parseInt(st.nextToken());
  48. f.P[x] = y;
  49. }
  50. else{
  51. int p = Integer.parseInt(st.nextToken());
  52. int x = f.D[p][0];
  53. int y = f.D[p][1];
  54. int g = f.adj[x].indexOf(y);
  55. int h = f.adj[y].indexOf(x);
  56. //out.println(g+" "+h);
  57. if(g!=-1)
  58. f.adj[x].remove(g);
  59. if(h!=-1)
  60. f.adj[y].remove(h);
  61. }
  62. for(int i = 1;i<=n;i++){
  63. if(!f.Used[i]){
  64. Queue<Integer> q = new LinkedList<Integer>();
  65. l = 0;
  66. q.add(i);
  67. f.Used[i] = true;
  68. while(q.size()!=0){
  69. int t = q.remove();
  70. l += f.P[t];
  71. // out.println(f.P[t] + " "+t);
  72. for(int k:f.adj[t]){
  73. if(!f.Used[k]){
  74. q.add(k);
  75. f.Used[k] = true;
  76. }
  77. }
  78. }
  79. }
  80. if(l>ans)ans = l;
  81. }
  82. out.println(ans);
  83. }
  84. }
  85. }
Success #stdin #stdout 0.1s 320576KB
stdin
3 3 6
1 2 3
1 2
2 3
3 1
P 1 3
D 1
P 2 3
D 2
P 3 10
D 3
stdout
8
8
9
6
13
10