ZOJ 3708 Density of Power Network(水题)

来源:互联网 发布:unity3d模型制作 编辑:程序博客网 时间:2024/05/18 22:52

题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3708

题意:

    题意挺简单的,就是数一下有多少种线路,并处以公交车的数量。题目的图很吓人,如果被这唬了的话就惨了,省赛的时候每道题都应该仔细看过,以免造成不必要的损失。

解法一:

     队友用的方法是用一张二维图来表示,如果对应位置已经被标记过了,就不加入计数,如果没标记过,就标记,并计数值加一。

代码:

#include<iostream>#include<string>#include<iomanip>#include<cstring>using namespace std;int a[505],b[505];int  map[505][505];int main(){int T,bus,m;cin>>T;while(T--){cin>>bus>>m;memset(map,0,sizeof(map));int sum=0;for(int i=1;i<=m;i++){cin>>a[i];}for(int i=1;i<=m;i++){cin>>b[i];}for(int i=1;i<=m;i++){if(map[a[i]][b[i]]||map[b[i]][a[i]])continue;else{map[a[i]][b[i]]=1; sum++;   }}double ans;ans=sum*1.0/(bus*1.0);cout<<fixed<<setprecision(3)<<ans<<endl;}}


解法二:

    我的想法是可以取小的那个乘以1000(因为原始数据最多只到500,所以能够区分),再加上大的那个,用set排重就行了。

代码:

#include <iostream>#include <string>#include <iomanip>#include <set>#include <algorithm>using namespace std;int a[505],b[505]; int main(){int T,bus,m,minn,maxx;cin>>T;while(T--){set <int> cnt;cin>>bus>>m;for(int i=1;i<=m;i++){cin>>a[i];}for(int i=1;i<=m;i++){cin>>b[i];}for(int i=1;i<=m;i++){minn=min(a[i],b[i]);maxx=max(a[i],b[i]);cnt.insert(minn*1000+maxx);}double ans;ans=cnt.size()*1.0/bus;cout<<fixed<<setprecision(3)<<ans<<endl;}return 0;}



0 0