Reading books

来源:互联网 发布:网络爱国事例 编辑:程序博客网 时间:2024/06/05 04:25

求无向图的强连通分量+贪心。

给定N本书,读类似的书一本之后其他类似的书阅读时间变为一半,求最短时间。

#include<cstdio>#include<cstring>#include<string.h>#define maxn 105#define INF 1<<20using namespace std;int map[maxn][maxn];int quan[maxn],vis[maxn];int n,m;int ans;int sum;int minv;void dfs(int x){vis[x]=1;sum+=quan[x]/2;if(minv>quan[x])minv=quan[x];for(int i=0;i<n;i++){if(!vis[i]&&map[x][i]==1)dfs(i);}}int main(){int c;int j;scanf("%d%d",&n,&m);memset(map,0,sizeof(map));ans=0;for(int c=0;c<n;c++)scanf("%d",&quan[c]);while(m--){scanf("%d%d",&c,&j);map[c][j]=map[j][c]=1;}memset(vis,0,sizeof(vis));for(int i=0;i<n;i++){if(!vis[i]){minv=INF;sum=0;dfs(i);ans+=sum-minv/2+minv;}}printf("%d\n",ans);return 0;}