题目地址:
首先要求最大生成树,来保证图的连通性(基于贪心的思想--尽量炸代价小的路,能炸得更多)
然后在资金足够的情况下,一一去炸代价小的路,直到钱不够当前最便宜的路了,break掉
代码:
#include#include #include #include #include using namespace std;int p[50005];struct edge{ int id; int x; int y; int w;};edge e[100005];bool ex[100005];bool cmp(edge a,edge b){ return a.w>b.w;}bool vecmp(edge a,edge b){ return a.id ve;int main(){ int flag=0; long long s; int x,y,w; while( cin>>n>>m>>s) { memset(ex,0,sizeof(ex)); ve.clear(); if(flag==1) cout< =0;i--) { if(ex[i]==1) continue; if(s 0) { sort(ve.begin(),ve.end(),vecmp); for(int i=0;i