EATTWICE - EDITORIAL

cook your dish here

import sys
q=int(input())

for _ in range(q):
n,m = map(int,input().split())
v=[]
d=[]
for i in range(n):
d1,v1=map(int,input().split())
d.append(d1)
v.append(v1)
v, d = zip(*sorted(zip(v, d)))
flag=0
for i in range(1,n):
if(d[n-i]==d[n-i-1]):
continue
else:
flag=v[n-1]+v[n-i-1]
break;
if(flag==0):
print(v[n-1])
else:
print(flag)

i have passed the sample test cases, can anybody help me with this code

One way to do using map and priority queue…

code

#include
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
cin>>t;
while(t–)
{
long long int n,m1,d,v,i,a,b,ans=0;
map<long long int,long long int>m;
priority_queue q;
map<long long int,long long int>::iterator it;
cin>>n>>m1;
for(i=0;i<n;i++)
{
cin>>d>>v;
if(m[d]<v)
m[d]=v;
}
for(it=m.begin();it!=m.end();it++)
q.push(it->second);
ans+=q.top();
q.pop();
if(!q.empty())
ans+=q.top();
cout<<ans<<endl;
}
return 0;
}