并查集(保存分组结果)

//如果只是输出有多少个团伙,那么只要比较pre[i]==i即可,但是若要求将不同的组织分行打印出来,那么需要注意要再压缩一次路径,即再find()一次~

#include <stdio.h>
 int pre[101];
 void merge(int b,int c);
 int find(int i);
 int main()
 {

     int i,m,n,c,d,sum,ok;
     scanf("%d%d",&n,&m);
     for (i=1;i<=n;i++)
        pre[i]=i;
    for (i=1;i<=m;i++)
    {

        scanf("%d%d",&c,&d);
        merge(c,d);
    }
    sum=0;

    for (i=1;i<=n;i++)
        if (pre[i]==i)
        sum++;
    printf("%d\n",sum);
    sum=1;
    for (i=1;i<=n;i++)
   find(i);
   while (sum<=n)
    {
        ok=0;
    for (i=1;i<=n;i++)
      if (pre[i]==sum)
      {
        ok=1;
        printf("%d ",i);
      }
      if (ok)
        printf("\n");
        sum++;
    }

      return 0;
 }
 int find(int i)
 {
     int j=i,temp;
     while (pre[i]!=i)
        i=pre[i];
     while (j!=i)
     {

         temp=pre[j];//先记录下下一个长官
         pre[j]=i;//统一都更新为i的手下
         j=temp;//迭代
     }
     return i;
 }
 void merge(int b,int c)
 {
     int t1,t2;
     t1=find(b);
     t2=find(c);
     if (t1!=t2)
     pre[t2]=t1;
     return;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 可以使用 GROUP BY 子句来进行分组查询,例如: ``` SELECT column1, COUNT(column2) FROM table_name GROUP BY column1; ``` 其中,column1 是要分组的列,COUNT(column2) 是对 column2 列进行计数。这条 SQL 语句会返回每个 column1 值对应的 column2 计数。 如果需要对多个列进行分组,可以在 GROUP BY 子句中指定多个列,例如: ``` SELECT column1, column2, COUNT(column3) FROM table_name GROUP BY column1, column2; ``` 这条 SQL 语句会返回每个 column1 和 column2 组合值对应的 column3 计数。 ### 回答2: Java中可以使用SQL语句来进行分组查询,主要通过SELECT语句的GROUP BY子句实现。 首先,我们需要连接到数据库,可以使用Java中的JDBC来实现。通过JDBC连接到数据库后,可以使用PreparedStatement对象来执行SQL语句。 以下是一个简单的示例,演示了如何在Java中使用分组查询: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; public class GroupByQueryExample { public static void main(String[] args) { Connection conn = null; PreparedStatement stmt = null; ResultSet rs = null; try { // 连接到数据库 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password"); // 编写SQL语句 String sql = "SELECT category, COUNT(*) FROM products GROUP BY category"; // 创建PreparedStatement对象并设置参数 stmt = conn.prepareStatement(sql); // 执行查询 rs = stmt.executeQuery(); // 处理查询结果 while (rs.next()) { String category = rs.getString("category"); int count = rs.getInt(2); System.out.println("分类:" + category + ",数量:" + count); } } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭连接和资源 try { if (rs != null) { rs.close(); } if (stmt != null) { stmt.close(); } if (conn != null) { conn.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } ``` 上述示例是一个简单的Java程序,通过JDBC连接到数据库,执行了一个分组查询的SQL语句,并打印结果。 需要注意的是,上述示例中的数据库连接信息(URL、用户名、密码)需要根据实际情况进行修改,确保与数据库的连接信息一致。同时要确保相关的JDBC驱动程序已被正确引入项目中。 ### 回答3: Java 分组查询是通过使用 SQL 语句的 GROUP BY 子句来实现的。GROUP BY 子句用于将结果集分组并根据分组生成汇总信息。 在 Java 中,可以使用 JDBC 来执行 SQL 查询。首先创建一个 Connection 对象,然后通过该对象创建一个 Statement 对象。接下来,使用 Statement 对象执行 SQL 查询,并将结果保存在 ResultSet 对象中。最后,使用 ResultSet 对象遍历结果并处理分组数据。 首先,编写 SQL 查询语句,包含 GROUP BY 子句和选择需要的列。例如,假设有一个名为 students 的表,其中包含学生的姓名和分数信息。想要按照分数进行分组,并计算每个分组的平均分。SQL 查询可以如下所示: SELECT score, AVG(score) FROM students GROUP BY score; 接下来,在 Java 中执行该查询。首先创建 Connection 和 Statement 对象,并连接到数据库。然后,使用 Statement 的 executeQuery() 方法执行查询,并将结果保存在 ResultSet 对象中。最后,使用 ResultSet 对象遍历结果并处理分组数据。具体代码示例如下: ```java import java.sql.*; public class GroupByExample { public static void main(String[] args) { Connection connection = null; Statement statement = null; ResultSet resultSet = null; try { // 创建连接 connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password"); // 创建 Statement 对象 statement = connection.createStatement(); // 执行查询 resultSet = statement.executeQuery("SELECT score, AVG(score) FROM students GROUP BY score"); // 遍历结果集 while (resultSet.next()) { // 获取分组数据 int score = resultSet.getInt(1); double averageScore = resultSet.getDouble(2); // 处理分组数据 System.out.println("Score: " + score + ", Average Score: " + averageScore); } } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭连接、Statement 和 ResultSet 对象 try { if (resultSet != null) { resultSet.close(); } if (statement != null) { statement.close(); } if (connection != null) { connection.close(); } } catch (SQLException e) { e.printStackTrace(); } } } } ``` 以上就是使用 Java 进行分组查询的简单示例。根据实际需求和数据表结构,可以编写不同的 SQL 查询语句来实现更复杂的分组查询功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值