제출 #1333477

#제출 시각아이디문제언어결과실행 시간메모리
1333477simplemind_31새로운 문제 (POI11_pro)C++20
10 / 100
53 ms2808 KiB
#include <bits/stdc++.h>
#define ALL(x) x.begin(),x.end()
using namespace std;
typedef long long ll;
bool posi[500][500],usado[500];
ll n,m,r,t,k,a,b,queda[500];
vector<ll> resuelve[500],resolvido[500];
vector<ll> res[500];
int main(){
    ios_base::sync_with_stdio(0);
    cin.tie(0);cout.tie(0);
    cin >> n >> m >> r >> t >> k;
    t/=r;
    for(ll i=0;i<n;i++)queda[i]=t;
    // cada persona resuelve a lo mucho t problems
    // ordenar task por cantidad de gente que lo resuelve(ascen) y persona por la cantidad que sobra
    while(k--){
        cin >> a >> b;
        posi[--a][--b]=true;
        resuelve[a].push_back(b);
        resolvido[b].push_back(a);
    }
    /*priority_queue<pair<ll,ll>,vector<pair<ll,ll>>,greater<pair<ll,ll>>> cola;
    for(ll i=0;i<m;i++){
        cola.push({resolvido[i].size(),i});
    }*/
    while(true){
        ll ind=-1,can=1e9;
        for(ll i=0;i<m;i++){
            if(usado[i])continue;
            ll con=0;
            for(auto u:resolvido[i]){
                if(queda[u])con++;
            }
            if(con>0 && con<can){
                can=con;
                ind=i;
            }
        }
        if(ind==-1)break;
        // elegir el que tiene mas opciones
        ll person=-1;
        can=0;
        for(auto u:resolvido[ind]){
            if(!queda[u])continue;
            ll con=0;
            for(auto v:resuelve[u]){
                if(!usado[v])con++;
            }
            if(con>can){
                person=u;
                can=con;
            }
        }
        // person resuelve ind
        res[person].push_back(ind);
        usado[ind]=true;
        queda[person]--;
    }
    vector<pair<pair<ll,ll>,ll>> superres;
    ll suma=0;
    for(ll i=0;i<n;i++){
        for(ll j=0;j<res[i].size();j++){
            suma+=j*r;
            superres.push_back({{i,res[i][j]},j*r});
        }
    }
    suma+=superres.size()*r;
    cout << superres.size() << ' ' << suma << '\n';
    for(auto u:superres){
        cout << u.first.first+1 << ' ' << u.first.second+1 << ' ' << u.second << '\n';
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...