Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define endl '\n'
- using namespace std;
- #ifdef ONLINE_JUDGE
- #define eprintf(...) 42
- #else
- #define eprintf(...) {fprintf(stderr, __VA_ARGS__);fflush(stderr);}
- #endif
- clock_t startTime;
- double getCurrentTime()
- {
- return (double)(clock() - startTime) / CLOCKS_PER_SEC;
- }
- const int N = 200007;
- vector<long long> dp(N, -1);
- set<int> gph, waste;
- vector<int> g[N];
- long long dfs(int node)
- {
- if(dp[node]!=-1)
- {
- return dp[node];
- }
- long long res = node;
- for(auto stuff : g[node])
- {
- res = max(res, dfs(stuff));
- }
- return dp[node]=res;
- }
- int solve()
- {
- long long n, m;
- cin>>n>>m;
- for(int i=0; i<n; i++)
- {
- int sz;
- cin>>sz;
- vector<long long> guy(sz);
- for(int j=0; j<sz; j++)
- {
- cin>>guy[j];
- }
- sort(guy.begin(), guy.end());
- long long nxt = 0, edg = -1;
- for(int j=0; j<sz; j++)
- {
- if(guy[j]>nxt)
- {
- if(edg==-1)
- {
- edg = nxt;
- nxt++;
- j--;
- continue;
- }
- else
- {
- break;
- }
- }
- if(guy[j]==nxt)
- {
- nxt++;
- }
- }
- if(edg==-1)
- {
- edg = nxt; nxt++;
- }
- g[edg].push_back(nxt);
- gph.insert(edg); gph.insert(nxt);
- waste.insert(edg);
- }
- long long base = *prev(waste.end());
- long long ans = 0;
- for(auto node : waste)
- {
- //cout<<"yo "<<" "<<node<<endl;
- if(g[node].size()>1)
- {
- base = max(base, dfs(node));
- }
- }
- for(auto node : waste)
- {
- if(dfs(node)>base && node<base && node<=m)
- {
- ans += dfs(node) - base;
- continue;
- }
- if(dfs(node)>node && node>=base && node<=m)
- {
- ans += dfs(node) - node;
- }
- }
- long long shit = min(base-1, m);
- cout<<ans + (shit+1)*base + (m*(m+1))/2 - (shit*(shit+1))/2<<endl;
- for(auto stuff : gph)
- {
- g[stuff].clear();
- dp[stuff] = -1;
- }
- waste.clear(); gph.clear();
- return 0;
- }
- int main()
- {
- ios::sync_with_stdio(false);
- cin.tie(0);
- int t;
- cin>>t;
- startTime = clock();
- while(t--)
- {
- solve();
- }
- eprintf("time = %.5lf\n", getCurrentTime());
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment