#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
const int MAXN = 100010;
int n, m, q;
int raizQ;
int ans[MAXN];
int indInside[MAXN];
int lastWeight[MAXN];
int anc[MAXN], sz[MAXN];
int U[MAXN], V[MAXN], W[MAXN];
bool mark[MAXN];
bool insideBlock[MAXN];
vector<int> adj[MAXN];
vector<pii> queries;
vector< pair<int,pii> > sweep;
int find(int cur)
{
if( anc[cur] == cur ) return cur;
return anc[cur] = find( anc[cur] );
}
void join(int i, int j)
{
i = find(i); j = find(j);
if( i == j ) return;
if( sz[i] < sz[j] )
swap( i , j );
anc[j] = i;
sz[i] += sz[j];
}
bool isUpdate(int i)
{
int val = queries[i].second;
return ( val > 0 );
}
void initDSU()
{
for(int i = 1 ; i <= n ; i++)
sz[i] = 1, anc[i] = i;
}
int DFS(int cur)
{
mark[cur] = true;
int ans = sz[cur];
for(int i = 0 ; i < (int)adj[cur].size() ; i++)
if( !mark[ adj[cur][i] ] ) ans += DFS( adj[cur][i] );
return ans;
}
int main()
{
scanf("%d %d",&n,&m);
for(int i = 1 ; i <= m ; i++)
scanf("%d %d %d",&U[i],&V[i],&W[i]);
scanf("%d",&q);
raizQ = sqrt(q) + 1;
for(int i = 1 ; i <= q ; i++)
{
int type;
scanf("%d",&type);
if( type == 1 )
{
int edge, newW;
scanf("%d %d",&edge,&newW);
queries.push_back( { newW , edge } );
}
if( type == 2 )
{
int s, maxW;
scanf("%d %d",&s,&maxW);
queries.push_back( { maxW , -s } );
}
ans[i - 1] = -1;
}
int lastBlock = (q - 1)/raizQ;
for(int i = 1 ; i <= m ; i++)
lastWeight[i] = W[i];
for(int block = 0 ; block <= lastBlock ; block++)
{
//printf("+============================+ Processando bloco %d\n",block);
int L = block*raizQ;
int R = (block + 1)*raizQ - 1;
R = min( R , q - 1 );
vector<int> inside;
sweep.clear();
for(int i = L ; i <= R ; i++)
{
if( isUpdate( i ) )
{
int edge = queries[i].second;
if( !insideBlock[edge] )
{
indInside[edge] = (int)inside.size();
//printf(".. edge = %d\n",edge);
insideBlock[edge] = true;
inside.push_back( edge );
}
}
else
{
int maxW = queries[i].first;
int source = -queries[i].second;
//printf("Achei query %d %d\n",source,maxW);
sweep.push_back( { maxW , { -source , i } } );
}
}
for(int i = 1 ; i <= m ; i++)
if( !insideBlock[i] ) sweep.push_back( { lastWeight[i] , { U[i] , V[i] } } );//, printf("Adicionei %d: %d -> %d com peso %d\n",i,U[i],V[i],lastWeight[i]);
//printf("\n\n\n");
//printf("------- Sweep Algorithm\n");
sort( sweep.begin() , sweep.end() );
initDSU();
for(int i = (int)sweep.size() - 1 ; i >= 0 ; i--)
{
int type = 0;
if( sweep[i].second.first < 0 ) type = 1;
if( type == 0 )//Update
{
int curU = sweep[i].second.first;
int curV = sweep[i].second.second;
//printf("Juntei %d %d\n",curU,curV);
join( curU , curV );
}
if( type == 1 )
{
int maxW = sweep[i].first;
int ind = sweep[i].second.second;
int source = -sweep[i].second.first;
//printf("Respondendo query maxW = %d source = %d ind = %d\n",maxW,source,ind);
vector<int> weightInside;
for(int j = 0 ; j < (int)inside.size() ; j++)
weightInside.push_back( lastWeight[ inside[j] ] );
for(int j = L ; j < ind ; j++)
{
if( isUpdate( j ) )
{
int newW = queries[j].first;
int edge = queries[j].second;
weightInside[ indInside[edge] ] = newW;
}
}
vector<int> nodes;
for(int j = 0 ; j < (int)inside.size() ; j++)
{
//printf("...... Tentando colocar %d -> %d com peso %d\n",U[ inside[j] ],V[ inside[j] ],weightInside[j]);
if( weightInside[j] >= maxW )
{
int curU = find( U[ inside[j] ] );
int curV = find( V[ inside[j] ] );
if( !mark[curU] ) nodes.push_back( curU ), mark[curU] = true;
if( !mark[curV] ) nodes.push_back( curV ), mark[curV] = true;
adj[curU].push_back( curV );
adj[curV].push_back( curU );
}
}
nodes.push_back( find(source) );
for(int i = 0 ; i < (int)nodes.size() ; i++)
mark[ nodes[i] ] = false;
ans[ind] = DFS( find(source) );
for(int i = 0 ; i < (int)nodes.size() ; i++)
mark[ nodes[i] ] = false, adj[ nodes[i] ].clear();
}
}
for(int i = 0 ; i < (int)inside.size() ; i++)
insideBlock[ inside[i] ] = false;
for(int i = L ; i <= R ; i++)
{
if( isUpdate( i ) )
{
int newW = queries[i].first;
int edge = queries[i].second;
lastWeight[edge] = newW;
}
}
}
for(int i = 0 ; i < q ; i++)
if( ans[i] != -1 ) printf("%d\n",ans[i]);
}
Compilation message
bridges.cpp: In function 'int main()':
bridges.cpp:69:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d",&n,&m);
~~~~~^~~~~~~~~~~~~~~
bridges.cpp:72:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d %d",&U[i],&V[i],&W[i]);
~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
bridges.cpp:74:7: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",&q);
~~~~~^~~~~~~~~
bridges.cpp:80:8: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d",&type);
~~~~~^~~~~~~~~~~~
bridges.cpp:85:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d",&edge,&newW);
~~~~~^~~~~~~~~~~~~~~~~~~~~
bridges.cpp:92:9: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
scanf("%d %d",&s,&maxW);
~~~~~^~~~~~~~~~~~~~~~~~
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
2688 KB |
Output is correct |
2 |
Correct |
2 ms |
2688 KB |
Output is correct |
3 |
Correct |
23 ms |
2944 KB |
Output is correct |
4 |
Correct |
8 ms |
2944 KB |
Output is correct |
5 |
Correct |
15 ms |
2944 KB |
Output is correct |
6 |
Correct |
14 ms |
2944 KB |
Output is correct |
7 |
Correct |
17 ms |
2944 KB |
Output is correct |
8 |
Correct |
18 ms |
2944 KB |
Output is correct |
9 |
Correct |
20 ms |
3012 KB |
Output is correct |
10 |
Correct |
18 ms |
2944 KB |
Output is correct |
11 |
Correct |
24 ms |
3008 KB |
Output is correct |
12 |
Correct |
20 ms |
2944 KB |
Output is correct |
13 |
Correct |
18 ms |
2944 KB |
Output is correct |
14 |
Correct |
19 ms |
3004 KB |
Output is correct |
15 |
Correct |
18 ms |
2944 KB |
Output is correct |
16 |
Correct |
18 ms |
2944 KB |
Output is correct |
17 |
Correct |
24 ms |
2944 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2426 ms |
7812 KB |
Output is correct |
2 |
Correct |
2384 ms |
7648 KB |
Output is correct |
3 |
Correct |
2394 ms |
7564 KB |
Output is correct |
4 |
Correct |
2329 ms |
7492 KB |
Output is correct |
5 |
Correct |
2352 ms |
7504 KB |
Output is correct |
6 |
Correct |
2661 ms |
7020 KB |
Output is correct |
7 |
Correct |
2628 ms |
7020 KB |
Output is correct |
8 |
Correct |
2586 ms |
7012 KB |
Output is correct |
9 |
Correct |
74 ms |
4200 KB |
Output is correct |
10 |
Correct |
2390 ms |
7556 KB |
Output is correct |
11 |
Correct |
2368 ms |
7728 KB |
Output is correct |
12 |
Correct |
2166 ms |
7324 KB |
Output is correct |
13 |
Correct |
2153 ms |
6780 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
1686 ms |
6440 KB |
Output is correct |
2 |
Correct |
846 ms |
4716 KB |
Output is correct |
3 |
Correct |
1855 ms |
6564 KB |
Output is correct |
4 |
Correct |
1682 ms |
6456 KB |
Output is correct |
5 |
Correct |
82 ms |
4204 KB |
Output is correct |
6 |
Correct |
1757 ms |
6380 KB |
Output is correct |
7 |
Correct |
1627 ms |
6464 KB |
Output is correct |
8 |
Correct |
1553 ms |
6504 KB |
Output is correct |
9 |
Correct |
1457 ms |
6376 KB |
Output is correct |
10 |
Correct |
1419 ms |
6180 KB |
Output is correct |
11 |
Correct |
1406 ms |
6332 KB |
Output is correct |
12 |
Correct |
1366 ms |
6648 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Execution timed out |
3062 ms |
7836 KB |
Time limit exceeded |
2 |
Halted |
0 ms |
0 KB |
- |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2426 ms |
7812 KB |
Output is correct |
2 |
Correct |
2384 ms |
7648 KB |
Output is correct |
3 |
Correct |
2394 ms |
7564 KB |
Output is correct |
4 |
Correct |
2329 ms |
7492 KB |
Output is correct |
5 |
Correct |
2352 ms |
7504 KB |
Output is correct |
6 |
Correct |
2661 ms |
7020 KB |
Output is correct |
7 |
Correct |
2628 ms |
7020 KB |
Output is correct |
8 |
Correct |
2586 ms |
7012 KB |
Output is correct |
9 |
Correct |
74 ms |
4200 KB |
Output is correct |
10 |
Correct |
2390 ms |
7556 KB |
Output is correct |
11 |
Correct |
2368 ms |
7728 KB |
Output is correct |
12 |
Correct |
2166 ms |
7324 KB |
Output is correct |
13 |
Correct |
2153 ms |
6780 KB |
Output is correct |
14 |
Correct |
1686 ms |
6440 KB |
Output is correct |
15 |
Correct |
846 ms |
4716 KB |
Output is correct |
16 |
Correct |
1855 ms |
6564 KB |
Output is correct |
17 |
Correct |
1682 ms |
6456 KB |
Output is correct |
18 |
Correct |
82 ms |
4204 KB |
Output is correct |
19 |
Correct |
1757 ms |
6380 KB |
Output is correct |
20 |
Correct |
1627 ms |
6464 KB |
Output is correct |
21 |
Correct |
1553 ms |
6504 KB |
Output is correct |
22 |
Correct |
1457 ms |
6376 KB |
Output is correct |
23 |
Correct |
1419 ms |
6180 KB |
Output is correct |
24 |
Correct |
1406 ms |
6332 KB |
Output is correct |
25 |
Correct |
1366 ms |
6648 KB |
Output is correct |
26 |
Correct |
2379 ms |
7300 KB |
Output is correct |
27 |
Correct |
2606 ms |
7568 KB |
Output is correct |
28 |
Correct |
2479 ms |
7420 KB |
Output is correct |
29 |
Correct |
2211 ms |
7276 KB |
Output is correct |
30 |
Correct |
2627 ms |
7584 KB |
Output is correct |
31 |
Correct |
2737 ms |
7532 KB |
Output is correct |
32 |
Correct |
2631 ms |
7576 KB |
Output is correct |
33 |
Correct |
2535 ms |
7692 KB |
Output is correct |
34 |
Correct |
2482 ms |
7424 KB |
Output is correct |
35 |
Correct |
2472 ms |
7408 KB |
Output is correct |
36 |
Correct |
2293 ms |
7408 KB |
Output is correct |
37 |
Correct |
2267 ms |
7400 KB |
Output is correct |
38 |
Correct |
2282 ms |
7272 KB |
Output is correct |
39 |
Correct |
2167 ms |
6888 KB |
Output is correct |
40 |
Correct |
2132 ms |
6892 KB |
Output is correct |
41 |
Correct |
2109 ms |
6892 KB |
Output is correct |
42 |
Correct |
2089 ms |
7432 KB |
Output is correct |
43 |
Correct |
2058 ms |
7396 KB |
Output is correct |
44 |
Correct |
2082 ms |
7508 KB |
Output is correct |
# |
Verdict |
Execution time |
Memory |
Grader output |
1 |
Correct |
2 ms |
2688 KB |
Output is correct |
2 |
Correct |
2 ms |
2688 KB |
Output is correct |
3 |
Correct |
23 ms |
2944 KB |
Output is correct |
4 |
Correct |
8 ms |
2944 KB |
Output is correct |
5 |
Correct |
15 ms |
2944 KB |
Output is correct |
6 |
Correct |
14 ms |
2944 KB |
Output is correct |
7 |
Correct |
17 ms |
2944 KB |
Output is correct |
8 |
Correct |
18 ms |
2944 KB |
Output is correct |
9 |
Correct |
20 ms |
3012 KB |
Output is correct |
10 |
Correct |
18 ms |
2944 KB |
Output is correct |
11 |
Correct |
24 ms |
3008 KB |
Output is correct |
12 |
Correct |
20 ms |
2944 KB |
Output is correct |
13 |
Correct |
18 ms |
2944 KB |
Output is correct |
14 |
Correct |
19 ms |
3004 KB |
Output is correct |
15 |
Correct |
18 ms |
2944 KB |
Output is correct |
16 |
Correct |
18 ms |
2944 KB |
Output is correct |
17 |
Correct |
24 ms |
2944 KB |
Output is correct |
18 |
Correct |
2426 ms |
7812 KB |
Output is correct |
19 |
Correct |
2384 ms |
7648 KB |
Output is correct |
20 |
Correct |
2394 ms |
7564 KB |
Output is correct |
21 |
Correct |
2329 ms |
7492 KB |
Output is correct |
22 |
Correct |
2352 ms |
7504 KB |
Output is correct |
23 |
Correct |
2661 ms |
7020 KB |
Output is correct |
24 |
Correct |
2628 ms |
7020 KB |
Output is correct |
25 |
Correct |
2586 ms |
7012 KB |
Output is correct |
26 |
Correct |
74 ms |
4200 KB |
Output is correct |
27 |
Correct |
2390 ms |
7556 KB |
Output is correct |
28 |
Correct |
2368 ms |
7728 KB |
Output is correct |
29 |
Correct |
2166 ms |
7324 KB |
Output is correct |
30 |
Correct |
2153 ms |
6780 KB |
Output is correct |
31 |
Correct |
1686 ms |
6440 KB |
Output is correct |
32 |
Correct |
846 ms |
4716 KB |
Output is correct |
33 |
Correct |
1855 ms |
6564 KB |
Output is correct |
34 |
Correct |
1682 ms |
6456 KB |
Output is correct |
35 |
Correct |
82 ms |
4204 KB |
Output is correct |
36 |
Correct |
1757 ms |
6380 KB |
Output is correct |
37 |
Correct |
1627 ms |
6464 KB |
Output is correct |
38 |
Correct |
1553 ms |
6504 KB |
Output is correct |
39 |
Correct |
1457 ms |
6376 KB |
Output is correct |
40 |
Correct |
1419 ms |
6180 KB |
Output is correct |
41 |
Correct |
1406 ms |
6332 KB |
Output is correct |
42 |
Correct |
1366 ms |
6648 KB |
Output is correct |
43 |
Execution timed out |
3062 ms |
7836 KB |
Time limit exceeded |
44 |
Halted |
0 ms |
0 KB |
- |