记录编号 |
191410 |
评测结果 |
AAAAAAAAAAAAAAAA |
题目名称 |
[USACO Oct05]奶牛航班 |
最终得分 |
100 |
用户昵称 |
mikumikumi |
是否通过 |
通过 |
代码语言 |
C++ |
运行时间 |
0.656 s |
提交时间 |
2015-10-07 17:26:41 |
内存使用 |
1.46 MiB |
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<iomanip>
#include<set>
using namespace std;
const int SIZEK=50010,SIZEN=10010,SIZEC=110;
int K,N,C;
class poi
{
public:
int fr,to,M;
poi()
{
fr=to=M=0;
}
};
bool cmp(poi a,poi b)
{
if(a.fr==b.fr) return a.to<b.to;
return a.fr<b.fr;
}
class miku
{
public:
int k;
poi m[SIZEK];
miku()
{
k=0;
}
void print()
{
for(int i=1;i<=k;i++)
cout<<m[i].fr<<" "<<m[i].to<<" "<<m[i].M<<endl;
}
void push(int fr,int to,int M)
{
k++;
m[k].fr=fr;m[k].to=to;m[k].M=M;
}
void Sort()
{
sort(m+1,m+1+k,cmp);
}
int get()
{
int ans=0;
multiset<int,greater<int> > load;
multiset<int,greater<int> >::iterator it;
int now=1;
for(int i=1;i<=N;i++)
{
it=load.end();if(!load.empty()) it--;
while(!load.empty()&&(*it)==i) load.erase(it--),ans++;//该下的下
while(m[now].fr==i)
{
for(int i=1;i<=m[now].M;i++) load.insert(m[now].to);
now++;
}
while(load.size()>C) load.erase(load.begin());
}
return ans;
}
}P,Q;
void read()
{
scanf("%d%d%d",&K,&N,&C);
int S,E,M;
for(int i=1;i<=K;i++)
{
scanf("%d%d%d",&S,&E,&M);
if(E>S) P.push(S,E,M);
else Q.push(E,S,M);
}
P.Sort();
Q.Sort();
}
int main()
{
freopen("cowflight.in","r",stdin);
freopen("cowflight.out","w",stdout);
read();
printf("%d",P.get()+Q.get());
return 0;
}