标签:sum 一个 esc iss blog osi oop positive most
Time Limit: 8000/4000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 2266 Accepted Submission(s): 544
#include<iostream> #include<cstdio> #include<cmath> #include<cstring> #include<algorithm> #include<queue> #include<stack> #include<vector> #include<map> #include<set> #include<bitset> using namespace std; #define PI acos(-1.0) #define eps 1e-8 typedef long long ll; typedef pair<int,int> P; const int N=1e3+100,M=4e3+100; struct edge { int from,to; int w; int next; }; int n,m,k; edge es[M]; int cnt,head[N]; int dfs_clock=0; int pre[N],low[N]; stack<int>s; void init(int n) { cnt=0; dfs_clock=0; for(int i=0; i<=n+10; i++) head[i]=-1,pre[i]=0; } void addedge(int u,int v,int w) { cnt++; es[cnt].from=u,es[cnt].to=v; es[cnt].w=w; es[cnt].next=head[u]; head[u]=cnt; } int tmp[100100],ans[100100]; struct node { int num; int id; bool operator <(const node x) const { return x.num>num; } }; void unit(priority_queue<node> &q) { tmp[0]=0; while(tmp[0]<k&&!q.empty()) { node x=q.top(); q.pop(); tmp[++tmp[0]]=x.num; if(++x.id<=ans[0]) q.push((node) { x.num-ans[x.id-1]+ans[x.id],x.id }); } ans[0]=0; for(int i=1; i<=tmp[0]; i++) ans[++ans[0]]=tmp[i]; } bool dfs(int u,int fa) { pre[u]=low[u]=++dfs_clock; for(int i=head[u]; i!=-1; i=es[i].next) { int v=es[i].to; if(v==fa) continue; if(!pre[v]) { s.push(i); dfs(v,u); low[u]=min(low[u],low[v]); if(low[v]>=pre[u]) { priority_queue<node>q; while(!s.empty()) { int poi=s.top(); s.pop(); q.push((node){ans[1]+es[poi].w,1}); if(poi==i) break; } if(q.size()>1) unit(q); } } else if(pre[v]<pre[u]&&v!=fa) { s.push(i); low[u]=min(low[u],pre[v]); } } } int main() { int Case=0; while(scanf("%d%d",&n,&m)!=EOF) { init(n); int all=0; for(int i=1; i<=m; i++) { int u,v,w; scanf("%d%d%d",&u,&v,&w); all+=w; addedge(u,v,w),addedge(v,u,w); } scanf("%d",&k); ans[0]=0,ans[++ans[0]]=0; dfs(1,0); ll sum=0,mod=(1LL<<32); for(int i=1; i<=ans[0]; i++) sum=(sum+(1LL*(all-ans[i])*i)%mod)%mod; printf("Case #%d: %lld\n",++Case,sum); } return 0; }
HDU 6041.I Curse Myself 无向仙人掌图
标签:sum 一个 esc iss blog osi oop positive most
原文地址:http://www.cnblogs.com/GeekZRF/p/7671257.html